<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
相信大家都使用過like進行模糊匹配查詢,在oracle中,instr()方法可以用來代替like進行模糊查詢,巨量資料量的時候效率更高。
本文將對instr()的基本使用方法進行詳解以及通過範例講解與like的效率對比。
instr(sourceString,destString,start,appearPosition)
instr('源字串' , '目標字串' ,'開始位置','第幾次出現'),返回目標字串在源字串中的位置。
後面兩個引數可要可不要。
【a】從開頭開始查詢第一個‘h’出現的位置
--從開頭開始查詢第一個‘h'出現的位置 select instr('zhangsan', 'h') as idx from dual; --2
查詢結果:
【b】從開頭開始查詢‘an’在字串中的位置
--從開頭開始查詢‘an'在字串中的位置 select instr('zhangsan','an') idx from dual; --3
查詢結果:
【c】從第一個位置開始查詢,返回第二次出現‘a’的位置
--從第一個位置開始查詢,返回第二次出現‘a'的位置 select instr('zhangsan','a',1,'2') idx from dual; --7
查詢結果:
【d】從倒數第一個位置開始,查詢第一次出現‘a’的位置
--從倒數第一個位置開始,查詢第一次出現‘a'的位置 select instr('zhangsan','a',-1,1) idx from dual; --7
查詢結果:
【e】從倒數第一個位置開始,返回第二次出現‘a’的位置
--從倒數第一個位置開始,返回第二次出現‘a'的位置 select instr('zhangsan','a',-1,2) idx from dual; --3
查詢結果:
【a】使用like進行模糊查詢
with temp1 as ( select 'zhangsan' as name from dual), temp2 as ( select 'zhangsi' as name from dual), temp3 as ( select 'xiaoming' as name from dual), temp4 as ( select 'xiaohong' as name from dual), temp5 as ( select 'zhaoliu' as name from dual) select * from (select * from temp1 union all select * from temp2 union all select * from temp3 union all select * from temp4 union all select * from temp5) res where res.name like '%zhang%'
查詢字串中包含‘zhang’的結果:
【b】使用instr()進行模糊查詢
(1) 查詢字串中包含‘zhang’的結果:
with temp1 as ( select 'zhangsan' as name from dual), temp2 as ( select 'zhangsi' as name from dual), temp3 as ( select 'xiaoming' as name from dual), temp4 as ( select 'xiaohong' as name from dual), temp5 as ( select 'zhaoliu' as name from dual) select * from (select * from temp1 union all select * from temp2 union all select * from temp3 union all select * from temp4 union all select * from temp5) res where instr(res.name,'zhang') > 0;
(2) 查詢字串中不包含‘zhang’的結果:
with temp1 as ( select 'zhangsan' as name from dual), temp2 as ( select 'zhangsi' as name from dual), temp3 as ( select 'xiaoming' as name from dual), temp4 as ( select 'xiaohong' as name from dual), temp5 as ( select 'zhaoliu' as name from dual) select * from (select * from temp1 union all select * from temp2 union all select * from temp3 union all select * from temp4 union all select * from temp5) res where instr(res.name,'zhang') = 0;
(3) 查詢以‘zhang’開頭的字串:
with temp1 as ( select 'zhangsan' as name from dual), temp2 as ( select 'zhangsi' as name from dual), temp3 as ( select 'sizhangsan' as name from dual), temp4 as ( select 'xiaohong' as name from dual), temp5 as ( select 'zhaoliu' as name from dual) select * from (select * from temp1 union all select * from temp2 union all select * from temp3 union all select * from temp4 union all select * from temp5) res where instr(res.name,'zhang') = 1;
(4)instr與like特殊用法
select id, name from users where instr('a, b', id) > 0; --等價於 select id, name from users where id = a or id = b; --等價於 select id, name from users where id in (a, b);
【a】使用plsql建立一張十萬條資料測試資料表,同時為需要進行模糊查詢的列增加索引
--建立10萬條測試資料 create table test_instr_like as select rownum as id,'zhangsan' as name from dual connect by level <= 100000; --name列建立索引 create index idx_tb_name on test_instr_like(name);
【b】使用like進行模糊查詢
select * from TEST_INSTR_LIKE t where t.name like '%zhang%'
總耗時: 60秒
【c】使用instr進行模糊查詢
select * from TEST_INSTR_LIKE t where instr(t.name, 'zhang') > 0;
總耗時:50秒
由圖可見,instr查詢的速度確實比like快一些,但是,看執行計劃的話,instr卻比like耗時一點。如下圖:
以上是對instr基本使用方法的講解以及通過範例對比了like與instr的效率,在進行模糊查詢的時候,能用instr的話就儘量用instr,畢竟資料量大的時候還是有一點優勢的,本文是筆者對like以及instr的一些總結和見解,僅供大家學習參考,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45