sql调优(三)——索引失效

sql优化之索引失效

我们在自己建立数据库索引时,有时候索引会失效,导致数据库性能下降,那么,我们如何避免索引失效呢,就要先知道什么时候索引失效。并且避免它,对它进行优化,提高数据库性能。

1.不遵守最佳作前缀法导致索引失效

1.1全值匹配
建立一个多值索引:

-- create index ind_x_name_department_age on employee (name,depart_id,age);

#全值匹配是最好的匹配效果 不会造成索引失效

explain select * from employee where name='孙尚香' and depart_id=1 and age=20;

在这里插入图片描述
1.2最佳左前缀法:
建立索引多列时,索引从左列开始,并且不跳过索引的列(顺序可以乱),若跳过第一个字段时,索引失效,来看例子 :上面表建立了name,depart_id,age的多值索引。全值索引 key_len=73 只用到两个字段 key_len=68 只用到一个字段key_len=63
全值索引时key_len=73:在这里插入图片描述

a.跳过中间一个字段depart_id时:只用到一个字段的索引值(key_len=63 ):
在这里插入图片描述

b.跳过第一个时索引失效(key_len=0):
在这里插入图片描述

c.跳过前俩个时索引失效(key_len=0):
在这里插入图片描述

2.在索引列上做(计算,函数,类型转换)操作导致索引失效

1.使用函数
在这里插入图片描述

3.查询范围条件右边索引失效:

当索引出现条件范围时右边的索引列失效:
在这里插入图片描述

4.查询条件符号导致索引失效

1.使用(!= ,<,>)无法使用索引,导致全表扫描。
在这里插入图片描述
2.使用is not null 无法使用索引,导致全表扫描。
在这里插入图片描述

3.or连接时索引失效,导致全表扫描。
在这里插入图片描述

4.like 以通配符在最前面(%qq)索引失效,
在这里插入图片描述

5.属性字符串不用单引号 ,变成全表扫描。
a.使用了引号,使用到了索引:
在这里插入图片描述
b.未使用引号,导致索引失效,变成全表扫描:
在这里插入图片描述
那么,如何解决上诉问题呢。使用覆盖索引
覆盖索引:查询的字段与建立索引字段刚好符合,只需扫描索引而无须回表。
1.like 以通配符在最前面(%qq)索引失效,导致全表扫描
在这里插入图片描述

2.使用覆盖索引,扫描类型type为index索引扫描,解决like‘+%’导致索引失效问题
在这里插入图片描述

只扫描索引而无需回表的优点:
1.索引条目通常远小于数据行大小,只需要读取索引,极大地减少数据访问量。
2.索引是按照列值顺序存储,对于IO密集的范围查找会比随机读取每一行数据的IO少。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值