`

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

 
阅读更多

ORACLELikeInstr模糊查询性能大比拼

 

 

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

 

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

 

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

 

t表中将近有1100万数据,很多时候,我们要进行字符串匹配,在SQL语句中,我们通常使用like来达到我们搜索的目标。但经过实际测试发现,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分钟即完成查找,性能是相当的好。这些小技巧用好,工作效率提高不少。通过上面的测试说明,ORACLE内建的一些函数,是经过相当程度的优化的。

 

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;

 

 

 

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

一般来说,在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语句会使索引数据重新排序的影响。

分享到:
评论

相关推荐

    Oracle中Like与Instr模糊查询性能大比拼

    在Oracle数据库中,进行字符串匹配查询时,我们经常会遇到`LIKE`和`INSTR`这两个操作符。它们在处理模糊查询时各有特点,但性能上可能存在显著差异。本篇文章将探讨`LIKE`与`INSTR`在实际应用中的性能表现,并提供...

    SQL使用Like模糊查询

    虽然`LIKE`模糊查询提供了极大的灵活性,但过度使用可能会对查询性能造成影响,特别是当匹配大型数据集时。因此,在设计数据库和编写查询时,应尽可能优化查询语句,如创建索引以提高查询速度。 ### 7. 实现示例 ...

    模糊查询的例子

    3. **INSTR函数**:在某些数据库系统(如Oracle),`INSTR`函数可以用来检查字符串中是否包含特定子串,虽然这不是标准SQL的一部分,但在某些模糊查询场景中也十分有用。 4. **DELPHI中的ADO或DAO组件**:在DELPHI...

    数据库中的模糊查询技术

    2.1 实现:模糊查询的实现通常涉及到特定的查询函数或操作符,例如SQL中的LIKE、ILIKE(不区分大小写)、BETWEEN等。 2.2 基本思想:模糊查询的基本思想是放宽传统的精确匹配条件,接受一定程度的不精确或不确定性,...

    mysql中使用instr进行模糊查询方法介绍

    在MySQL数据库中,进行模糊查询通常使用`LIKE`操作符,但还有一种高效的方法是使用内置函数`INSTR`。`INSTR`函数允许我们更精确地定位字符串中子串出现的位置,尤其在处理大数据量时,其性能优势更为明显。 `INSTR`...

    oracle查询效率调优实例

    在这个例子中,添加 `ROWNUM = 1` 后,查询时间从原来的 45 秒减少到了 4 秒,极大地提高了查询效率。 通过以上实例可以看出,合理利用 Oracle 提供的各种提示和技巧,可以在处理大量数据时显著提升查询性能。这些...

    informix数据库实现oracle环境instr函数功能

    例如,Oracle数据库中的`INSTR`函数用于查找一个字符串在另一个字符串中的位置,而Informix数据库虽然强大但其原生支持的功能与Oracle并不完全相同。因此,在某些情况下,开发人员可能需要编写特定的函数来模拟...

    Oracle中instr和substr存储过程详解

    instr函数用于从指定的位置开始,从大型对象中查找第N个与模式匹配的字符串。 用于查找内部大对象中的字符串的instr函数语法如下: dbms_lob.instr( lob_loc in blob, pattern in raw, offset in integer := 1; nth...

    Oracle如何对CLOB行字段来执行全文检索

    Oracle 数据库中,CLOB 行字段是一种常用的数据类型,用于存储大文本数据。然而,在 Oracle8i 版本之前,对大字段 CLOB 仍然不支持在 where 子句直接的 Like 操作。这使得开发者无法直接对 CLOB 字段中的内容进行 ...

    oracle使用instr或like方法判断是否包含字符串

    但是,使用contains谓词有个条件,那就是列要建立索引,也就是说如果上面语句中students表的address列没有建立索引,那么就会报错。 好在我们还有另外一个办法,那就是使用instr,instr的用法如下: select * from ...

    Oracle的substr和instr函数简单用法

    Oracle数据库中的`substr`和`instr`函数是两个非常实用的字符串处理函数,它们在数据库查询和数据处理中扮演着重要角色。 `substr`函数,全称为“substring”,用于从一个字符串中截取一部分。其基本语法是: ```...

    MySQL Like模糊查询速度太慢如何解决

    MySQL中的LIKE操作符常用于执行模糊查询,但其性能表现往往取决于查询模式和索引的使用情况。在处理大量数据时,低效的LIKE查询可能导致显著的性能下降。以下是一些关于如何优化MySQL LIKE模糊查询的策略: 1. **...

    oracle 同音字查询

    Oracle的模糊查询函数`LIKE`、`INSTR`、`SOUNDEX`和`SIMILAR TO`等可以辅助实现同音字查询。其中,`SOUNDEX`函数可以计算字符串的发音代码,但主要针对英文,对于中文的支持有限。`INSTR`函数可以检测字符串中是否...

    Oracle中instr函数使用方法

    Oracle中的`instr`函数是一个非常实用的字符串处理函数,它用于在源字符串中查找目标字符串的位置。函数的基本语法如下: ```sql instr(string1, string2 [, start_position [, nth_appearance ] ]) ``` - `string...

    Oracle中的instr()函数应用及使用详解

    `instr()`函数可以与MySQL中的`LIKE`操作符相提并论,它们都能实现模糊查询。例如: - MySQL: `select * from tableName where name like '%helloworld%'` - Oracle: `select * from tableName where instr(name,...

    SQL数据库模糊查询内容语句

    在模糊查询中,它们可以与LIKE结合使用。例如,查找所有以“abc”结尾的名字: ```sql SELECT * FROM 表名 WHERE name LIKE '%abc'; ``` 4. **RLIKE或REGEXP** 在MySQL中,RLIKE和REGEXP支持更复杂的正则表达式...

    Oracle性能优化的基本准则总结

    8. **使用instr代替LIKE**:对于需要使用LIKE进行过滤的情况,可以考虑使用Oracle内置的instr函数,它通常比LIKE操作更快。 9. **避免使用UNION**:UNION操作会删除重复记录,这需要排序操作,可能会消耗大量资源。...

Global site tag (gtag.js) - Google Analytics