最左前缀和最左匹配_可交换矩阵满足的条件[通俗易懂]

最左前缀和最左匹配_可交换矩阵满足的条件[通俗易懂]最左前缀原则:顾名思义是最左优先,以最左边的为起点任何连续的索引都能匹配上

最左前缀原则:顾名思义是最左优先,以最左边的为起点任何连续的索引都能匹配上。

(1)如果第一个字段是范围查询需要单独建一个索引;

(2)在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边;

当创建(a,b,c)复合索引时,想要索引生效的话,只能使用 a和ab、ac和abc三种组合!

实例:以下是常见的几个查询:

mysql>SELECT `a`,`b`,`c` FROM A WHERE `a`='a1' ; //索引生效
mysql>SELECT `a`,`b`,`c` FROM A WHERE `b`='b2' AND `c`='c2'; //索引失效
mysql>SELECT `a`,`b`,`c` FROM A WHERE `a`='a3' AND `c`='c3'; //索引生效,实际上值使用了索引a

扩展:想要索引最大化的使用需要至少建几个索引?

答:需要建立复合索引:bc

3.1、三个字段联合索引测试:

在这里插入图片描述

联合索引的顺序为:sex,age,name

SELECT * FROM user where age="4"; #未使用索引
SELECT * FROM user where name="2"; #未使用索引
SELECT * FROM user where sex="2" and age="3"; #使用索引
SELECT * FROM user where sex="2" and age="3" and name="4"; #使用索引
SELECT * FROM user where age="3" and name="4";  #未使用索引
SELECT * FROM user where sex="2" and name="4";  #使用索引

#这个在3.2最后边解释,为什么

explain SELECT * FROM index_demo.user where age="2" and sex="3"; #使用索引

值得注意的是,where sex=“2” and name=“4” 这个相当于只有sex使用到了索引的,

在这里插入图片描述

和where sex=“2” and age=“3” and name=”4″的区别:

在这里插入图片描述

3.2、如果索引字段有两个 如果索引有两个字段:sex,age

在这里插入图片描述

explain SELECT * FROM index_demo.user where age="4"; #未使用索引
explain SELECT * FROM index_demo.user where sex="2" and age="3"; #使用索引
explain SELECT * FROM index_demo.user where age="3" and sex="4";  #使用索引

在这里插入图片描述
在这里插入图片描述
where sex=“2” and age=“3”;和where sex=“2” and age=“3”;

这两个都是用了索引的,这是mysql查询优化器,mysql查询优化器会判断纠正这条sql语句该以什么样的顺序执行效率最高,最后才生成真正的执行计划。所以,当然是我们能尽量的利用到索引时的查询顺序效率最高咯,所以mysql查询优化器会最终以这种顺序进行查询执行。

然后回到刚才的3.1中三个索引的时候:sex,age,name

explain SELECT * FROM index_demo.user where age="2" and sex="3"; #使用索引

这条语句竟然使用索引了

在这里插入图片描述

可以看出他是使用索引了,因为对于三个索引的时候,只要是前两个,存在,不论顺序是什么都是会使用索引的,这里主要是mysql查询优化器起的作用了;

今天的文章最左前缀和最左匹配_可交换矩阵满足的条件[通俗易懂]分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/77718.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注