关于mysql的复合索引的初级问题

2020-11-11 16:30发布

问题:

https://blog.csdn.net/qq_37591656/article/details/99172693

这个里面的表,建立了c1,2,3,4的复合索引
为啥c1单独查就可以使用了索引,c2就不行...然后c1+c2又可以用索引了..

想请教一下这是为什么,或者有什么相关的文章推荐一下吗

回答1:

你看下《高性能MySQL》,你看看我博客里画的图:MySQL优化技巧。

可以这样理解:比如有一堆学生,每个学生都有姓名和编号,如果你用姓名和编号做多列索引,姓名在前。如果学生按索引列排队的话:首先姓名靠前的排前面,如果多个人姓名相同,那么学号靠前的排前面。 这样就很直观地看出,为什么用姓名可以,用姓名+编号也可以,但是用编号却不行了。给你给示例数据你想想:

{'阿宝', 8},
{'卜均生', 1},
{'曹操', 2},
{'党项族', 3},
{'刘备', 5},
{'刘备', 6},
{'刘备', 7},
{'张飞', 4}

总而言之,就是:首先按照第一列排序,如果第一列相同,才按第二列排,如果第二列再相同,才按第三列排。
如果有个多列索引[a,b,c],用a、ab、abc做查询条件时都可以用到索引,但是用b、bc等就不行了,需要另外单独建立索引



回答2:

复合索引有顺序的,所以c1可以,c2不行,你用c2+c1试试,我印象中这样也不行



回答3:

https://dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html
官方文档是最好的



回答4:

mysql 复合索引对查询条件 顺序有要求的,也是他建立索引的顺序。详细查阅官方文档



回答5:

mysql复合索引遵循最左原则,
即c1,2,3,4索引的话
c1
c1,c2
c1,c2,c3
c1,c2,c3,c4
这样的的都是可以用到索引的。其他2,3,4开头的都是没用的。
当然最终搜索的时候用没用到还得看mysql内部优化器处理结果。



回答6:

“mysql复合索引遵循最左匹配原则” 道出了索引生效的重点



标签: mysql 索引