利用reverse函数索引优化like ‘%xxxx‘

前言:

我们都知道在使用Like模糊查询,只有使用like 'xxxx%'格式才能正确利用索引范围扫描,那么实际中遇到按字符串末尾模糊查询(%xxxx)该如何优化?

一、构建实验例子
1.创建测试表(大概90M)
create table test1 as
select level id,
       dbms_random.string('X', 30) name,
       dbms_random.string('f', 30) address,
       dbms_random.string('x', 80) info
  from dual
connect by level <= 500000;
2.收集统计信息
begin
  dbms_stats.gather_table_stats('SCOTT', 'TEST1');
end;
/
3.需要优化的sql
SQL> select * from test1 t where t.name like '%AQPZCH';

        ID NAME                                                                             ADDRESS                                                                          INFO
---------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
         1 S0HHEJJ8OXPSW2UMA4BTXT24AQPZCH                                                   LWOXKGPPZWFDBBLAFZKGLJYLECTFMT                                                   1Z38U41HOTII8EVDU94O06DAXLYA3WZML23193J3UPINNCRSP9RRDV0YK1IX1049WLJIIFGOZMCNI43N

二、优化like '%xxxx’方法
1.创建reverse函数索引
create index idx_test1_n1 on test1(reverse(name));
2.等价改写原sql
select * from test1 t where reverse(t.name) like reverse('%AQPZCH');
3.对比前后性能

优化前:
在这里插入图片描述
优化后
在这里插入图片描述

结论:

优化后逻辑读下降2000倍!!!由于实验只有90M,随着表越大性能提升越明显

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值