最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Oracle中like、instr和regexp_like性能的讨论总结
时间:2022-06-29 09:36:47 编辑:袖梨 来源:一聚教程网
1、regexp_like功能强大,但效率比like要差;
2、若使用like的字段上无索引,且匹配字符串前后都有%,则instr效率高;
3、若使用like的字段上有索引,且匹配字符串前后都有%,若仅操作索引字段则like效率高,若有其他字段则instr效率高,可能的原因是仅操作索引字段不会全表扫描而是采用全索引扫描;
4、若使用like的字段上有索引,且仅匹配字符串结尾有%,则like效率高,因为like使用到了索引,而instr会造成索引失效走且表扫描;
综上所述,like和instr哪个效率高要视情况而定,两者效率均高于regexp_like。
【实验】
注:本实验转自网络,但原出处无法查实故未添加引用链接,若有侵权请联系我。
例如:t表中将近有1100万数据,我们要进行字符串匹配,经过实际测试发现,like与instr函数在性能上有一定差别,测试结果如下:
SQL> set timing on
SQL> select count(*) from t where instr(title,'手册')>0;
COUNT(*)
----------
65881
Elapsed: 00:00:11.04
SQL> select count(*) from t where title like '%手册%';
COUNT(*)
----------
65881
Elapsed: 00:00:31.47
SQL> select count(*) from t where instr(title,'手册')=0;
COUNT(*)
----------
11554580
Elapsed: 00:00:11.31
SQL> select count(*) from t where title not like '%手册%';
COUNT(*)
----------
11554580
另外一个2亿多的表,使用8个并行,使用like查询很久都不出来结果,但使用instr函数4分钟即完成查找,性能是相当的好。这些小技巧用好,工作效率提高不少。
说明:instr(title, 'aaa')>0功能相当于like,instr(title, 'aaa')=0功能相当于not like,但是效率不同。
若在title字段上加非唯一性索引:
create index idx_t_ title on t(title);
这样,再使用
select * from t where instr(title,'手册')>0;
这样的语句查询,效率可以提高不少,表数据量越大时instr优势越明显。
若不带其他字段,如下:
select count(1) from t where title like '%手册%';
select count(1) from t where instr(title,'手册')>0;
结果发现,like的效率要大大优于instr。
相关文章
- 蛙漫网页版免密登录入口-蛙漫网页版快捷免密登录通道 05-23
- jm漫画-官方正版网页入口 05-23
- 使用Adobe illustrator制作月牙形状的详细步骤 05-23
- 麻花星空MV高清免费看-麻花豆MV在线完整观 05-23
- 深海迷航2前期铅获取指南-铅的采集方法与技巧 05-23
- 秀秀漫画登录页面免费漫画入口在线阅读下载安装-秀秀漫画免费网站首页界面进入高清版本 05-23