三字段分别建索引,SQL 会用哪个¶
一、场景¶
表 t 有索引: - idx_a(a) - idx_b(b) - idx_c(c)
SQL:
二、结论¶
只会用其中一个索引(可能 a、b、c 中的一个),具体哪个看优化器。
三、为什么不用三个¶
MySQL 5.6 之前只能用一个。5.6 后有索引合并,但一般效果不好。
四、索引合并¶
- index_merge_union:或。
- index_merge_intersect:与。
但: - 优化器不一定选。 - 合并后还要回表。
五、正确做法¶
建联合索引:
六、为什么¶
联合索引 B+ 树按 a、b、c 排序,一次查完。
一句话
三个单值索引不如一个联合索引。