MySql总结

最左前缀法则

错误说法:WHERE子句中过滤条件的出现顺序必须和索引顺序一样。
正确理解:顺序不重要,查询优化器会自动重排条件。真正的规则是,从索引最左列开始,连续使用的列才能走索引。
例:

-- 索引 (a, b, c)
WHERE b = 2 AND a = 1; 

三类不走索引典型场景

  1. 跳过中间列
    WHERE a = 1 AND c = 3,只用 a,c失效,跳过了b,索引连续性被破坏
  2. 左侧用范围
    WHERE a > 1 AND b = 2,只用 a,b 失效 a 使用范围后,b 无法参与排序
  3. 未从最左开始
    WHERE b = 2 AND c = 3,不走索引,索引的第一个列 a 没有被引用

explain重点字段

  1. type
    如何查找数据
  2. key
    是否走索引
  3. rows
    预估扫描行数
  4. filtered
    过滤效率,表示存储引擎返回的数据经过 Server 层过滤后,剩余的比例(百分比)