当多条件查询的时候我们可以使用组合索引,查询效率会更高,因为当有多个单列索引时,MySQL只能用到其中那个它认为最有效率的单列索引。
最左前缀原则?
组合索引遵循最左前缀原则,这个最左前缀可以是联合索引的最左N个字段,也可以是字符串索引的最左M个字符。好比(a,b)组成的联合索引,只有当a和b的联合查询或者基于a的单独查询会用到索引,基于b的单独查询是用不到索引的。
如何安排组合索引内的字段顺序?
好比如果你想拿a,b两个字段当组合索引,需要考虑a和b谁在前的问题。
(1)第一原则是,如果通过调整顺序,可以少维护一个索引,那么这个顺序往往就是需要优先考虑采用的。如果既有联合查询,又有基于a的查询(没有基于b的单独查询),如果我们使用(b,a)这个联合索引的话,在查询条件里面只有b的语句里是用不到索引的,还得维护多一个a索引,这时应该调整顺序将a放在前面。
(2)第二原则是空间,如果既有联合查询,又有基于a、b各自的查询呢?如果查询条件里面只有b的语句,是无法使用(a,b)这个联合索引的,这时候你不得不维护另外一个索引,也就是说你需要同时维护(a,b)、(b) 这两个索引。这时候,我们要考虑的原则就是空间了。比如a字段是比b字段占用空间大 ,那我就建议你创建一个(a,b)的联合索引和一个b的单字段索引。