2 u011637643 u011637643 于 2016.03.10 13:45 提问

oracle like instr 性能

网上看了一些例子,说是oracle的instr性能要比like的要好,我自己测试了一下:
select count(*) from t_log_app ; 总数据为13558892行

select count(*) from t_log_app where instr(fentityid,'CE7AE')>0;
这条语句执行结果为:2606 耗时 40s
select count(*) from t_log_app where fentityid like '%CE7AE%' ;
这条语句执行结果为:2606 耗时 41s
这样看其实性能都差不多。(注:fentityid非索引)

再测试一下索引
select count(*) from t_log_app where instr(fitemname,'addnew')>0;
这条语句执行结果为:268126 耗时 40s
select count(*) from t_log_app where fitemname like '%addnew%' ;
这条语句执行结果为:268126 耗时 ≈7s
这样看 like又比instr性能要好了。这究竟是什么原因???

1个回答

gcgl000hugang12345
gcgl000hugang12345   2016.03.22 09:40

对于:fitemname like '%addnew%' ; 创建索引其实是没有用的,oracle不会走索引,但是他速度快了,一般是因为之前执行过这个sql,共享池中有缓存

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
SQL中instr和like的使用区别
1、instr函数  instr函数是一个字符串处理函数,它在Oracle/PLSQL中是返回子字符串在源字符串中的位置,如果在源串中没有找到子串,则返回0。 instr函数定义如下: /* * 返回子字符串在源字符串中的位置(字符串位置从1开始,而不是从0开始) * @param str 源字符串 * @param substr 子字符串 * @param posi
oracle中Like与Instr的性能比较
<br />t表中将近有1100万数据,很多时候,我们要进行字符串匹配,在SQL语句中,我们通常使用like来达到我们搜索的目标。但经过实际测试发现,like的效率与instr函数差别相当大。下面是一些测试结果:<br />SQL> set timing on<br />SQL> select count(*) from t where instr(title,’手册’)>0;<br />COUNT(*)<br />———-<br />65881<br />Elapsed: 00:00:11.04<br /
MySql中Like与Instr模糊查询性能比较
ORACLE中Like与Instr模糊查询性能大比拼  instr(title,'手册')>0  相当于  title like '%手册%'  instr(title,'手册')=1  相当于  title like '手册%'  instr(title,'手册')=0  相当于  title not like '%手册%' 测试表名:el_manage_data  数据量(
oracle substr,substrb ,instr,instrb函数的用法以及like的优化
oracle substr,substrb ,instr,instrb函数的用法以及like的优化   --------------------substr,substrb----------------   说明:substr,substrb均为字符串截取函数,都带有三个参数,第一个参数为所要截取的字符串,第二个参数为strart(索引均从1开始),第三个参数为lengt
Oracle模糊查询 like与instr
分2种思路考虑模糊查询的效率的提高。--注:专注处理百万级数据量,小量数据就算了 第一种:把数据存到业务内存中,通过查询内存提高效率。(要求:硬件内存要高) 1,如果想实现内存动态数据,可以监控表数据变化更新内存。   第二种:提高oracle数据库的查询方式。 1、使用两边加‘%’号的查询,oracle是不通过索引的,所以查询效率很低。     例如:sele
oracle instr函数用法和(oracle 用instr 来代替 like)
最近项目中出现oracle instr函数,于是在网上找了一下关于它的资料。 Oracle中INSTR和SUBSTR的用法 Oracle中INSTR的用法: INSTR方法的格式为 INSTR(源字符串, 要查找的字符串, 从第几个字符开始, 要找到第几个匹配的序号) 返回找到的位置,如果找不到则返回0. 例如:INSTR('CORPORATE FLOOR','OR', 3
提高sql查询性能-使用instr函数替换like
在查询时经常使用like作为关键字进行模糊查询,在生产环境中由于数据量较大,使用like查询时比较慢,尝试了一些方法,最终发现使用oracle的instr函数可以显著提高查询的效率. 关于数据量: SELECT count(1) FROM t_partner_role;  --612565 SELECT count(1) FROM T_VENDOR_REPOSITORY; 
instr和like效率对比
SELECT * FROM energy_minute_2_all_2012_10 WHERE  INSTR(coding,'010')>0 (782621 row(s) returned) Execution Time : 00:00:00:031 Transfer Time  : 00:00:03:713 Total Time     : 00:00:03:744
使用Oracle的instr函数与索引配合提高模糊查询的效率 一般来说,在Oracle数据库中,我们对tb表的name字段进行模糊查询会采用下面两种方式: 1.select * from tb wh
使用Oracle的instr函数与索引配合提高模糊查询的效率 一般来说,在Oracle数据库中,我们对tb表的name字段进行模糊查询会采用下面两种方式: 1.select * from tb where name like '%XX%'; 2.select * from tb where instr(name,'XX')>0; 若是在name字段上没有加索引,两者效率差不多,基本没有
Oracle title like '%关键字%' instr(title,'关键字') 区别
Oracle   title  like   %关键字%  instr(title,'关键字')  区别 页面写了个搜索,自己想优化加速查询,边搜索了下 发现还有个 instr(title,'关键字')   instr(title,'关键字') >0  相当于 title  like   '%关键字%'  instr(title,'关键字') =0  相当于 title  not  lik