关于mysql中的组合索引的简单使用介绍

例如组合索引(a1,a2,a3),组合索引的生效原则是

从前往后依次使用生效,如果中间某个索引没有使用,那么断点前面的索引部分起作用,断点后面的索引没有起作用;

比如

select * from Table where a1=3 and a2=4 and a3=5 这种三个索引依次顺序使用中间没有断点,全部发挥作用;

select * from Table where a1=3 and a3=5 这种情况下a2就是断点,a1发挥了效果,a3没有效果

select * from Table where a2=3 and a3=4 这种情况下a1就是断点,在a1后面的索引都没有发挥作用,这种写法联合索引没有任何效果;

select * from Table where a2=4 and a1=3 and a3=5 这样索引全部发挥作用,只要a1,a2,a3都用到就可以,和使用得顺序无关。

组合索引使用判断:

1: select * from Table where a1=3 and a2=5 and a3=4;

a1a2a3三个索引都在where条件里面用到了,而且都发挥了作用

2: select * from Table where a3=4 and a2=6 and a1=3;
where里面的条件顺序在查询之前会被mysql自动优化,效果跟上一句一样

3: select * from Table where a1=3 and a3=7;

a1用到索引,a2没有用,所以a3是没有用到索引效果的

4: select * from Table where a1=3 and a2>7 and a3=3;(范围值就算是断点)

a1用到了,a2也用到了,a3没有用到,这个地方a2是范围值,也算断点,只不过自身用到了索引

5: select * from Table where a2=3 and a3=4;

因为a1索引没有使用,所以这里 a2a3都没有用上索引效果

6: select * from Table where a1>4 and a2=7 and a3=9;

a1用到了 a2没有使用,a3没有使用

7: select * from Table where a1=3 order by a2;

a1用到了索引,a2在结果排序中也用到了索引的效果,前面说了,a1下面任意一段的a2是排好序的

8: select * from Table where a1=3 order by a3;

a1用到了索引,但是这个地方a3没有发挥排序效果,因为中间断点了,使用 expla1in 可以看到 filesort

9: select * from Table where a2=3 order a2y a1;

a2没有用到索引,排序中a1也没有发挥索引效果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值