https://blog.csdn.net/qq_37591656/article/details/99172693
这个里面的表,建立了c1,2,3,4的复合索引
为啥c1单独查就可以使用了索引,c2就不行...然后c1+c2又可以用索引了..
想请教一下这是为什么,或者有什么相关的文章推荐一下吗
相关问题
- sqlyog export query result as csv
- NOT DISTINCT query in mySQL
- MySQL: conduct a basic search
- Why sometimes there is one of more gap(s) in the v
- mySQL alter table on update, current timestamp
复合索引有顺序的,所以c1可以,c2不行,你用c2+c1试试,我印象中这样也不行
mysql 复合索引对查询条件 顺序有要求的,也是他建立索引的顺序。详细查阅官方文档
“mysql复合索引遵循最左匹配原则” 道出了索引生效的重点
https://dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html
官方文档是最好的
mysql复合索引遵循最左原则,
即c1,2,3,4索引的话
c1
c1,c2
c1,c2,c3
c1,c2,c3,c4
这样的的都是可以用到索引的。其他2,3,4开头的都是没用的。
当然最终搜索的时候用没用到还得看mysql内部优化器处理结果。
你看下《高性能MySQL》,你看看我博客里画的图:MySQL优化技巧。
可以这样理解:比如有一堆学生,每个学生都有姓名和编号,如果你用姓名和编号做多列索引,姓名在前。如果学生按索引列排队的话:首先姓名靠前的排前面,如果多个人姓名相同,那么学号靠前的排前面。 这样就很直观地看出,为什么用姓名可以,用姓名+编号也可以,但是用编号却不行了。给你给示例数据你想想:
总而言之,就是:首先按照第一列排序,如果第一列相同,才按第二列排,如果第二列再相同,才按第三列排。
如果有个多列索引[a,b,c],用a、ab、abc做查询条件时都可以用到索引,但是用b、bc等就不行了,需要另外单独建立索引