绥化建设网站,网站优化 seo和sem,小程序会员系统开发,手机主题如何自己制作网站一、定义#xff1a;
联合索引中#xff0c;从最左边的字段开始匹配#xff0c;若条件中字段在联合索引中符合从左到右的顺序则走索引#xff0c;否则不走#xff0c;可以简单理解为(a, b, c)的联合索引相当于创建了a索引、(a, b)索引和(a, b, c)索引。同时遇到范围查询
联合索引中从最左边的字段开始匹配若条件中字段在联合索引中符合从左到右的顺序则走索引否则不走可以简单理解为(a, b, c)的联合索引相当于创建了a索引、(a, b)索引和(a, b, c)索引。同时遇到范围查询、、between、like就会停止匹配。
举例比如一个表有a,b,c 三个字段然后建立 联合索引 index(a,b,c) 注意这里索引字段的顺序
select * from table where a 1; //会走索引select * from table where a 1 and b 2; //会走索引select * from table where a 1 and b 2 and c 2 //会走索引select * from table where c 3; //不会走索引select * from table where b 2 and c 3; //不会走索引
注意
如果索引顺序是a,b 但是查询语句是 where b2 and a 1,这时候索引也能命中。
select * from table where b 2 and a 1; //会走索引这是由于mysql查询优化器会自动调整where 的条件顺序。
二、不符合最左原则导致索引失效的情况
1、查询条件没有第一个字段
select * from table where b 2 and c 3; //不会走索引2、查询条件没有第二个字段
select * from table where a 1 and c 3; //c不会走索引3、特殊查询
select * from LOL where a 2 and b 1000 and c3;// a b会走索引c 不会走mysql会一直向右匹配直到遇到范围查询(、、between、like)就停止匹配。like 要注意一下如果通配符% 不出现在开头则可以走索引。“value%” 可以使用索引但是 like “%value%” 违背了最左匹配原则不会使用索引走的是全表扫描。
三、原理
mysql创建复合索引的规则会对复合索引第一个索引即左侧第一个索引进行排序再对第二个索引字段进行排序。类似order by 1 || and order by 2因此保证了字段1是绝对有序的。字段2不能保证根据MySQL的查询优化规则会首先根据有序的索引查找减少时间。由此产生了最左匹配原则。
举例
在a值相等的情况下b值又是按顺序排列的但是这种顺序是相对的。所以最左匹配原则遇上范围查询就会停止剩下的字段都无法使用索引。例如a 1 and b 2 a,b字段都可以使用索引因为在a值确定的情况下b是相对有序的而a1and b2a字段可以匹配上索引但b值不可以因为a的值是一个范围在这个范围中b是无序的。