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

2020-11-11 16:06发布

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

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

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

标签: mysql 索引
6条回答
beautiful°
2楼-- · 2020-11-11 16:18

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

查看更多
戒情不戒烟
3楼-- · 2020-11-11 16:22

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

查看更多
Juvenile、少年°
4楼-- · 2020-11-11 16:25

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

查看更多
啃猪蹄的小仙女
6楼-- · 2020-11-11 16:34

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

查看更多
男人必须洒脱
7楼-- · 2020-11-11 16:38

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

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

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

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

查看更多
登录 后发表回答