- • const:主键或唯一二级索引的等值查询,常量级速度
- • ref:普通二级索引等值;联合索引要求最左侧连续多列等值
- • 主键 / 唯一索引写 IS NULL:只能算 ref(例外规则)
- • 二级索引同时等值 + IS NULL:ref_or_null(搜值也搜 NULL)
- • 看到 const / ref:底层一定是在某棵索引树上快速查找
- • 以为 index = 走索引树二分查找?大错特错
- • 真相:从叶子节点开始一个页一个页遍历二级索引
- • 触发场景:where 用了非最左列,但 select 的列全在联合索引里
- • 因为不用回聚簇索引,二级索引叶子又小 → 比全表扫描快
- • 但本质是遍历,速度远不如 const / ref / range
- • and 条件 → 各查一棵索引树 → 按主键取交集再回表
- • or 条件 → 各查一棵索引树 → 取并集
- • 硬性条件:联合索引全字段等值,或主键 + 二级索引等值
- • 交机能把上万条回表缩成几十条,此时优化器才划算
- • 不是必然发生:优化器按成本决定用不用这招