INSTR代替NOT LIKE

instr(title,‘手册‘)>0  相当于  title like ‘%手册%‘

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

instr(title,‘手册‘)=0  相当于  title 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数据库中,我们对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语句会使索引数据重新排序的影响。

摘自: http://www.blogjava.net/rabbit/archive/2013/01/21/394510.html

时间: 2024-08-09 17:59:35

INSTR代替NOT LIKE的相关文章

replace与regexp_replace区别使用以及like与instr差异

repalce(str_source,str1,str2) 把 str_source 中 str1 字符串替换为 str2 字符串,当 str2 为 null 或'' 时,与下个作用相同 replace(str_source,str1) 把str_source 中的 str1 字符串剔除 regexp_replace(str_source,pattern_str) 把 str_source 中的 pattern_str 字符串剔除 Oracle中 like与instr之间的区别于联系:在没有创建

Oracle instr 及 like

原文: http://www.cnblogs.com/crazyjava/archive/2012/10/31/2748202.html instr(string1,string2[,start_position[,nth_appearence]]) string1:要在此字符串中查找. string2:要在string1中查找的字符串. start_position:从string1开始查找的位置.可选,默认为1,正数时,从左到右检索,负数时,从右到左检索. nth_appearence:查找

oracle instr函数使用

INSTR(源字符串, 目标字符串, 起始位置, 匹配序号) :在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置.只检索一次,就是说从字符的开始到字符的结尾就结束. 一.语法如下: instr( string1, string2 [, start_position [, nth_appearance ] ] ) 1>参数分析:  ①string1:源字符串,要在此字符串中查找. ②string2:要在string1中查找的字符串.  ③start_position

2016.7.10 SqlServer语句中类似decode、substr、instr、replace、length等函数的用法

Decode() 对应 case when函数 case CHARINDEX('/',start_point_name) when 0 then start_point_name else substring(start_point_name,1,CHARINDEX('/',start_point_name)-1) end 注意:sqlserver在用case when判断是否为null时,语法不一样 判断null应该用: case when identifier is null then ai

[转]ORACLE中Like与Instr模糊查询性能大比拼

instr(title,'手册')>0  相当于  title like '%手册%' instr(title,'手册')=1  相当于  title like '手册%' instr(title,'手册')=0  相当于  title not like '%手册%' t表中将近有1100万数据,很多时候,我们要进行字符串匹配,在SQL语句中,我们通常使用like来达到我们搜索的目标.但经过实际测试发现,like的效率与instr函数差别相当大.下面是一些测试结果: SQL> set timi

MySQL比like语句更高效的写法locate position instr find_in_se

SELECT `column` from `table` where locate('keyword', `condition`)>0; // LOCATE(substr,str,pos);locate 多一个起始位置的参数 SELECT `column` from `table` where position('keyword' IN `condition`); SELECT `column` from `table` where instr(`condition`, 'keyword')>

PLSQL_基础系列1_正则表达式regexp_like/substr/instr/replace

2014-11-30 BaoXinjian 一.摘要 ORACLE中的支持正则表达式的函数主要有下面四个: 1 REGEXP_LIKE :与LIKE的功能相似 2 REGEXP_INSTR :与INSTR的功能相似 3 REGEXP_SUBSTR :与SUBSTR的功能相似 4 REGEXP_REPLACE :与REPLACE的功能相似 它们在用法上与Oracle SQL 函数LIKE.INSTR.SUBSTR 和REPLACE 用法相同. 二.调用格式 1. 格式: REGEXP_INSTR

工作问题总结一:由数据查询慢来浅谈下oracle中的like和instr函数的模糊查询效率问题

今天上午10点左右,boss告诉我们生产环境一客户在某功能下录入信息时,出现加载数据很慢的情况,因为严重影响了客户使用,就让我们赶紧查实原因,组长和我就根据领导提供的用户登录系统,找到出问题的那个功能,选择买方和银行信息后加载限额信息时组长的电脑出现的反应是浏览器卡死,我的电脑上是去趟厕所回来坐下来之后才加载出来,我靠3分钟左右的时间,崩溃!!!  赶紧查代码  经查询代码发现,加载的数据是从千万量级(有2321w余条)的表中查询,查询语句中使用了like操作符,经研究发现确实是因为查询的sql

mysql中INSTR函数的用法

INSTR(字段名, 字符串) 这个函数返回字符串在某一个字段的内容中的位置, 没有找到字符串返回0,否则返回位置(从1开始) SELECT * FROM tblTopic ORDER BY INSTR( topicTitle, 'ha' ) > 0 DESC SELECT INSTR( topicTitle, 'ha' ) FROM tblTopic mysql中使用instr配合IN排序 将instr结果作为一列,按其排序 select id,1 from world_guide where

oracle instr函数

语法:instr( fatherstr, sonstr [, start_position [, matchtimes ] ] ) fatherstr:父字符串.要在此字符串中查找子字符串的位置. sonstr:要在fatherstr中查找的字符串. start_position:代表从fatherstr開始查找的的開始位置.此參数可选,假设省略默觉得1. 字符串索引从1開始.假设此參数为正.从左到右開始检索.假设此參数为负,从右到左检索, 返回要查找的子字符串在父字符串中的開始索引. matc