复合索引使用

一个a,b,c三个字段的索引怎么使用?

一张A表以a(是varchar类型),b,c三个字段建立索引,怎么去使用(先看下面几种使用方式):
1.select * from A where a = ? and b = ? and c = ?
2.select * from A where a = ? and c = ?
3.select * from A where b = ? and c = ?
4.select * from A where c = ? and b = ? and a = ?
5.select * from A where a = ? and b > ? and c = ?
6.select * from A where a like ‘%?%’
7.select * from A where a like ‘?%’
8.select * from A where a = 张三
9.select a,b,c from A
说明:所有?均表示对应类型的数据
以上1,4,7,9可以用到该复合索引,2对于a字段可以用到索引,c字段无法使用
分析:对于符合索引而言我们知道在索引B+树中同一层从左到右是该索引字段的值依次变大,对于符合索引而言a从左到右依次变大,在a相同时b依次变大,b相同时c依次变大,所以1依次将索引字段作为条件可以使用到索引,4按照正常来说是不会使用到索引,但是MySQL在执行之前会经历查询优化器进行优化SQL那么会优化成和1一样的顺序所以也可以使用到,3直接没有a字段那么在B+树中就无法确定走哪一条支线(直接判断b字段在没有a相同的条件下b是一个无序的无法使用索引),5a字段也能使用到但是b和c不能使用到,因为b进行了范围查询,6因为左边有%号,那么对于a字段来说就不能确定走哪一条索引分支,7%号在右边那么可以确定一开始的分支,8因为a字段是varcahr需要带上’‘没有’'会进行隐式的类型转换不能使用到索引,9因为查询的a,b,c都能通过索引树直接获取到值,会使用到覆盖索引那么通过explain查看时在Extra中会有useing index。
总结:对于索引因为是排好序的数据结构,需要落盘所以表中的索引不是越多越好,一般不超过五个,尽量建立复合索引性价比更高(一个复合索引可以有几个单值索引的功能),对于复合索引使用时开头的第一个字段必须要有,如果中间的某些字段没有那么后面的字段是使用不到索引的,范围查找也不行,隐式类型转换或者函数,计算等也会让索引失效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值