admin 管理员组文章数量: 1184232
2024年3月20日发(作者:php mysql项目)
instr和like的效率比较
测试环境 oracle10g,
tcurrentbilllog
表总数有近200万条
instr(‘源字符串’,’查询字符串’)>0 相当于 ‘源字符串’ like ’%查询字符串%’ =true
instr(‘源字符串’,’查询字符串’)=0 相当于 ‘源字符串’ like ’%查询字符串%’ =false
1.%a%方式:
select * from pub_yh_bm t where instr(_bmdm,'2')>0
等份于:
select * from pub_yh_bm t where _bmdm like '%2%'
2.%a方式:
select * from pub_yh_bm t
where instr(_bmdm,'110101')=length(_bmdm)-length('110101')+1
等份于:
select * from pub_yh_bm t where _bmdm like '%110101'
3.a%方式:
select * from pub_yh_bm t where instr(_bmdm,'11010101')=1
等份于:
select * from pub_yh_bm t where _bmdm like '11010101%'
全表查询
select * from tcurrentbilllog t where instr(no,'0301')>0;
用时:0.188秒
解释计划
SELECT STATEMENT, GOAL = ALL_ROWS 耗费=4187 基数=30833 字节=6659928
TABLE ACCESS FULL 对象所有者=ICD 对象名称=TCURRENTBILLLOG 耗费=4187 基数=30833
节=6659928
select * from tcurrentbilllog t where no like '%0301%';
用时:0.266秒
解释计划
SELECT STATEMENT, GOAL = ALL_ROWS 耗费=4182 基数=30833 字节=6659928
TABLE ACCESS FULL 对象所有者=ICD 对象名称=TCURRENTBILLLOG 耗费=4182 基数=30833
节=6659928
结果:instr查询用时少,但解释计划中耗费高一些。
集合查询
select count(*) from tcurrentbilllog t where instr(no,'0301')>0;
用时:3.765秒
解释计划:
SELECT STATEMENT, GOAL = ALL_ROWS 耗费=4183 基数=1 字节=12
SORT AGGREGATE 基数=1 字节=12
字
字
TABLE ACCESS FULL
字节=369996
对象所有者=ICD 对象名称=TCURRENTBILLLOG 耗费=4183 基数=30833
select count(*) from tcurrentbilllog t where no like '%0301%';
用时:4.157秒
解释计划:
SELECT STATEMENT, GOAL = ALL_ROWS
SORT AGGREGATE
字节=369996
耗费=4178 基数=1 字节=12
基数=1 字节=12
对象名称=TCURRENTBILLLOG 耗费=4178 基数=30833 TABLE ACCESS FULL 对象所有者=ICD
结果:instr查询用时少,但解释计划中开销要高一些。
like有时可以用到索引,例如:name like '李%'
而当下面的情况时索引会失效:name like '%李'
简单测试来看,instr的效率是比like要高些(orace对内建函数做了优化),而且使用like时,一些
索引是不能用的,但oracle支持函数索引,如果使用函数索引的话,执行更快。
一般的数据库中,instr和like的效率是没有多大差别的,但对于oracle数据库可以通过函数索引来提
高instr的执行效率。
版权声明:本文标题:instr和like的效率(oracle) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1710922341a579720.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论