在联合索引时,一定会碰到并用到最左匹配原则。所谓最左匹配原则,就是你的SQL语句中用到了联合索引中的最左边的索引,那么这条SQL语句就可以利用这个联合索引去进行匹配。不仅仅MySQL支持联合索引的最左匹配原则,MongoDB数据库也支持。

值得注意的是,当遇到范围查询时候,例如>,<,between,like,索引就会停止匹配。

  • 组合索引 - composite index
  • 最左匹配原则 - leftmost prefix principle

案例说明

例如对(a,b,c,d)字段建立索引,使用where如下,就是可以匹配索引的。

1
2
3
a = 1
a = 1 AND b = 2
b = 1 AND a = 1 # MySQL优化器会自动调整a和b的顺序,保持与索引顺序一致。

但是如果执行如下,那么将无法命中匹配索引。

1
2
b = 2 # b有序的前提是a有序,如果a无法确定,那么在B+树里肯定也是无序的,所以不能命中匹配索引。
a = 1 AND b = 2 AND c > 3 AND d = 4 # a和b和c可以命中索引,但是d因为遇到了范围查询,故无法命中索引