折雨的天空
oracle的like优化,对比了一下,效果确实比like好些。
2016-3-31 我好笨
instr(title,'手册')>0  相当于  title like '%手册%'

instr(title,'手册')=1 相当于 title like '手册%'

instr(title,'手册')=0 相当于 title not like '%手册%'










instr(title,’aaa’)>0 相当于like

instr(title,’aaa’)=0 相当于not like



特殊用法:



select id, name from users where instr('101914, 104703', id) > 0;
它等价于
select id, name from users where id = 101914 or id = 104703;







使用Oracle的instr函数与索引配合提高模糊查询的效率

一般来说,在Oracle数据库中,我们对tb表的name字段进行模糊查询会采用下面两种方式:
1.select * from tb where name like '%XX%';
2.select * from tb where instr(name,'XX')>0;

若是在name字段上没有加索引,两者效率差不多,基本没有区别。

为提高效率,我们在name字段上可以加上非唯一性索引:
create index idx_tb_name on tb(name);

这样,再使用

select * from tb where instr(name,'XX')>0;

这样的语句查询,效率可以提高不少,表数据量越大时两者差别越大。但也要顾及到name字段加上索引后DML语句会使索引数据重新排序的影响。



发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容