索引失效的特殊场景:只有like ‘xxxx%’一个条件,索引也可能失效

发现问题:内网系统,随着数据量增多,页面一个统计功能特别慢,跟踪定位分析,发现统计sql有问题,有个关键的索引未生效。千万级的数据,全表扫描.......最后缩减到最简单的一句,select * from table  where zjhm like 'xxxx%',还是没用到索引,什么情况?百度N篇索引失效,各种试,然后发现了个关于索引失效有趣的问题。

试验过程:

内网oracle,外网Mysql,数据量一千七百万,条件:证件号码,普通索引;

Sql:select  *  from table t where t.zjhm like 'xxxx%';

数据分布:天津旅馆业数据(别纳闷怎么只有这么点数据,这新系统上线才八个月)。

试验结果表:

编号

like条件(总18位)

数量(单位:万)

比例(总1700万)

Mysql(5.7)

Oracle(11g)

1

12

330

19.41%

2

120103

24.7

1.45%

3

12010319

24.2

1.42%

4

65

10

0.59%

5

120103199

5.6

0.33%

6

653

0.96

0.056%

7

6531

0.56

0.033%

8

8

0.24

0.014%

sql里解释计划的图我就不发了,测验结果绝对没问题,好奇的是有两组数据。第5,6组数据,六组比五组少很多数据,但奇怪的是五组用到索引了,六组没用到。难道这和like中条件的所占位数还有关系么???

我的结论:like  'xxxx%' 时是否使用索引,与该条件数量和数据总量比例有关,具体多少不清楚,虽然知道大量重复数据会导致不走索引,like 时应该和这个同理,但百度了N篇,没一篇有提到过这现象。另怀疑还有可能和like字符长度位数占总位数比例有关。我这只是实践得出,具体是否正确,有待证实!

有深入研究过Mysql,Oracle索引机制的大神们,欢迎点评,谢谢!

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值