MySQL索引的艺术:如何精准选择、建立和维护索引

本文深入探讨了SQL执行计划分析,解释了explain的使用方法及其对查询优化的重要性。文章详细介绍了索引的设计原则,包括最左匹配原则、覆盖索引的利用,以及索引在提高查询速度和确保数据唯一性方面的优势。同时,也讨论了索引可能带来的性能开销和空间占用问题。适合建立索引的列和不适合建立索引的列也被明确指出。

1 Explain执行计划分析

explain的用法

# 执行计划
explain select * from pms_product where id=1;
# 组合索引一定是最左匹配原则
# 如果你在表上建立了很多组合索引,索引文件膨胀,修改、删除、更新会比较慢

expalin的作用

  • 查看表的读取顺序
  • 读取操作类型
  • 哪些索引可用
  • 表之间关联
  • 每张表有哪些索引被优化器执行

type

  • system
  • const
  • eq_ref
  • ref
  • range
  • index
  • ALL

查询的效果从上到下越来越差

2 索引命中策略分析

  • 最左匹配原则
  • 在索引字段上加入函数:不走索引
  • is null/is not null:不走索引
  • 覆盖索引:key-value都在索引里,如果select columns直接使用的是索引列就直接使用覆盖索引
  • 只要索引条件和or挨着:就用不上

3 索引分析总结

优势:

  1. 提高查询速度
  2. 表连接的时候,加速连接
  3. 保证数据唯一:唯一索引

劣势:

  1. 修改和增加数据时会提升开销
  2. 索引还会占用物理空间
  3. 在进行大量的insert或update、delete时,速度会变慢

适合建立索引的列:

  1. 数据差异化较大
  2. 频繁查询的列,where条件里经常用到的
  3. 常用的表关联字段
  4. 查询中统计或分组的字段

不适合建立索引的列

  1. 记录值特别少
  2. 值变化特别小,重复率高
  3. 经常增删改的表

4 数据库出现问题后如何死而不僵

mysql> show processlist;
mysql> kill pid;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值