索引最左匹配原则
-
索引可以简单的一个列如{a},也可以多个复杂的列组合形成{a,b,c,d}即联合索引。如果是联合索引的话,那么key也可以由多个列组成,同时索引只能用于查找key是否存在(相等),遇到范围查询(<、>、between、like左匹配)等就不能进一步匹配,后退为线性查找。列的排列顺序决定了可命中索引的列数。
- 索引{a,b,c,d},查询条件为a =1,b=2 and c>3 and d =4,会在每个节点依次命中a、b、c,无法命中d。因为c是范围查询了,d肯定是排不了序了。select * from user where age >20,如果age列创建索引,这个会走索引吗?索引{a,b,c,d},那如果是查询条件是b=2 and c>3 and d =4,或者 c>3 and d =4,这样的话,d能走索引吗?索引{a,b,c,d},查询条件为a =1,b=2 and c>3 and d =4,d能命中吗?
欢迎批评指正,提出问题,谢谢!