首页 / MYSQL / 影响mysql索引生效的场景
影响mysql索引生效的场景
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了影响mysql索引生效的场景,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1585字,纯文字阅读大概需要3分钟。
内容图文
首先我们要知道mysql中 myisam,innodb默认使用的是 Btree索引,至于btree的数据结构是怎样的都不重要,
只需要知道结果,既然是索引那这个数据结构最后是排好序;就像新华字典他的目录就是按照a,b,c..这样排好序的;
所以你在找东西的时候才快,比如你找 “中” 这个字的解释,你肯定就会定位到目录的 z 开头部分;
组合索引可以这样理解,比如(a,b,c),abc都是排好序的,在任意一段a的下面b都是排好序的,任何一段b下面c都是排好序的;
组合索引的生效原则是 从前往后依次使用生效,如果中间某个索引没有使用,那么断点前面的索引部分起作用,断点后面的索引没有起作用;
比如
where a=3and b=45and c=5 .... 这种三个索引顺序使用中间没有断点,全部发挥作用; where a=3and c=5... 这种情况下b就是断点,a发挥了效果,c没有效果 where b=3and c=4... 这种情况下a就是断点,在a后面的索引都没有发挥作用,这种写法联合索引没有发挥任何效果; where b=45and a=3and c=5 .... 这个跟第一个一样,全部发挥作用,abc只要用上了就行,跟写的顺序无关
(a,b,c) 三个列上加了联合索引(是联合索引 不是在每个列上单独加索引)
还需注意, (a,b,c)多列索引和 (a,c,b)是不一样的,看上面的图也看得出来关系顺序是不一样的;
分析几个实际例子来加强理解;
分析句子中使用的索引情况
(0) select*from mytable where a=3and b=5and c=4; abc三个索引都在where条件里面用到了,而且都发挥了作用 (1) select*from mytable where c=4and b=6and a=3; 这条语句列出来只想说明 mysql没有那么笨,where里面的条件顺序在查询之前会被mysql自动优化,效果跟上一句一样 (2) select*from mytable where a=3and c=7; a用到索引,b没有用,所以c是没有用到索引效果的 (3) select*from mytable where a=3and b>7and c=3; a用到了,b也用到了,c没有用到,这个地方b是范围值,也算断点,只不过自身用到了索引 (4) select*from mytable where b=3and c=4; 因为a索引没有使用,所以这里 bc都没有用上索引效果 (5) select*from mytable where a>4and b=7and c=9; a用到了 b没有使用,c没有使用 (6) select*from mytable where a=3orderby b; a用到了索引,b在结果排序中也用到了索引的效果,前面说了,a下面任意一段的b是排好序的 (7) select*from mytable where a=3orderby c; a用到了索引,但是这个地方c没有发挥排序效果,因为中间断点了,使用 explain 可以看到 filesort (8) select*from mytable where b=3orderby a; b没有用到索引,排序中a也没有发挥索引效果
其他影响mysql索引生效问题见:https://blog.csdn.net/weixin_37645838/article/details/82785166
原文:https://www.cnblogs.com/jifengblog/p/12853799.html
内容总结
以上是互联网集市为您收集整理的影响mysql索引生效的场景全部内容,希望文章能够帮你解决影响mysql索引生效的场景所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。