MySQL索引优化

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;

你可能感兴趣的:(MySQL)