mysql的组合索引

创建联合索引

修改表-创建索引
image
创建表-创建索引
image

创建结果:

Seq_in_index:表示该列在索引中的位置,如果索引是单列的,则该列的值为 1;如果索引是组合索引,则该列的值为每列在索引定义中的顺序。
这里decie_id在组合索引中的顺序是1,question_id在组合索引中的顺序是2
列在组合索引的顺序主要影响在排序和查询条件中

使用组合索引

where子句使用组合索引

where条件中索引列交换位置不会影响查询
2个条件都使用上,优化器可以自己调整顺序满足索引要求
image
image
根据最左原则,where条件只用了decie_id,组合索引不会失效
image
根据最左原则,where条件只用了question_id,组合索引失效
image

order语句使用组合索引

优化器默认采取全部扫描了,因为是查询出所有数据,所以全表扫描会比索引更快,节省回表的时间,排序使用的是文件排序
image
如果是筛选部分数据,那么就会使用到索引而不会全表扫描;排序使用的是索引字段
image
调整orderby字段的顺序之后,索引失效;所以当使用order by语句,确保与联合索引的顺序要一致
image
索引覆盖
image

where和order子句中使用组合索引

where条件只有where条件只用了decie_id,根据最左原则索引生效;实际只用了decie_id索引,order by使用索引生效
image
where条件只有where条件只用了decie_id,根据最左原则索引生效;但是decie_id使用>范围查找后,导致数据乱序,实际只用了decie_id索引;排序是通过索引question_id排序的
image

组合索引失效

where条件中有>=导致组合索引失效
image
最左原则匹配失败,组合索引失效
image

参考:https://mp.weixin.qq.com/s?__biz=MzI2NzM1OTM4OA==&mid=2247495940&idx=1&sn=a229b322b7caa51a3b3c53466e22bfd8&chksm=ea82b4f7ddf53de196cee2bafbfa44f7cc2c0e5b0f74cdac91e7a5d6c611b3ecefc5df0d8332&scene=27

posted @ 2024-07-26 12:11  吐司波妞  阅读(256)  评论(0)    收藏  举报