%字符串% 查询优化

参考文章 like‘%xxxxx%‘性能优化

在这篇文章中,有这么段话:
在这里插入图片描述

这种方法还是第一次见到,一开始看还没看懂,什么叫客制化?instr函数又是什么?下面这个两个sql也没看懂。不得不说,工作后不常用的东西忘得越来越多了。

一,instr函数

instr函数为字符查找函数,其功能是查找一个字符串在另一个字符串中首次出现的位置。instr函数在Oracle/PLSQL中是返回要截取的字符串在源字符串中的位置

1 select instr('helloworld','l') from dual; --返回结果:3    默认第一次出现“l”的位置
2 select instr('helloworld','lo') from dual; --返回结果:4    即“lo”同时出现,第一个字母“l”出现的位置
3 select instr('helloworld','wo') from dual; --返回结果:6    即“wo”同时出现,第一个字母“w”出现的位置

二,解读sql

需要优化的sql

 select * from test1 t where t.name like '%AQPZCH%';

通常的方法就不多赘述,现在我们说说原作者使用instr()函数来优化的思路。

第一步,为test1表来创建索引。索引列是字符串在name中第一次出现的位置。

create index idx_test1_n2 on test1(instr(name,'AQPZCH'));

当你要查询name中包含 AQPZCH 字符串时,不用再根据字符串来查找,只用根据字符串在name中第一次出现的位置来查,这样就能使用到索引。

select * from test1 t where instr(t.name,'AQPZCH') >0;

当然缺点也很明显,平时工作中不可能为每一个要查找的字符串建立索引,只针对特定的场景。

结尾:虽然这种方式用的很少, 但是对于我来说,属于是开阔了视野,咱也不一定费用用instr函数,用其他的也行呀,博客上的大佬们真是吧sql玩出花来了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值