跳转至

三字段分别建索引,SQL 会用哪个

一、场景

表 t 有索引: - idx_a(a) - idx_b(b) - idx_c(c)

SQL:

select * from t where a=? and b=? and c=?

二、结论

只会用其中一个索引(可能 a、b、c 中的一个),具体哪个看优化器。

三、为什么不用三个

MySQL 5.6 之前只能用一个。5.6 后有索引合并,但一般效果不好。

四、索引合并

  • index_merge_union:或。
  • index_merge_intersect:与。

但: - 优化器不一定选。 - 合并后还要回表。

五、正确做法

建联合索引:

index idx_abc(a, b, c)

六、为什么

联合索引 B+ 树按 a、b、c 排序,一次查完。

一句话

三个单值索引不如一个联合索引。