`
晴天雨天
  • 浏览: 14157 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

like %str%优化

阅读更多
Oracle like '%...%' 优化


1。尽量不要使用 like '%%'

2。对于 like '%' (不以 % 开头),Oracle可以应用 colunm上的index

3。对于 like '%…' 的 (不以 % 结尾),可以利用reverse + function index 的形式,变化成 like '%'

4.非用like'%%'不可时,使用Oracle内部函数:INSTR()解决。



建测试表和Index,注意,重点在于带reverse的function index。同时,一定要使用CBO才行

create table test_like as select object_id,object_name from dba_objects;

-------建立测试表

create index test_like__name on test_like(object_name);

------建立索引

create index test_like__name_reverse on test_like(reverse(object_name));

------建立反向索引

analyze table test_like compute statistics for table for all indexes;

------对表进行分析

都过SQLPLUS连接到数据,一定是SQLPLUS,因为下面有写命令在PLSQL的命令行中不被支持;

set autotrace trace exp

-----设定SQL跟踪

set linesize 2000

-------设定输出宽度



select * from test_like where object_name like 'AS%';

使用了索引

select * from test_like where object_name like '%S';

未使用索引

select * from test_like where reverse(object_name)like reverse('%AS');

使用了索引



4.

在大表中,进行模糊查询,一般情况下是用LIKE'%%',但是这个东西走的是全表扫描,如果在数据量非常大的情况下,效率特别慢,因此,尝试用ORACLE函数INSTR()来解决。

实验步骤如下:

首先构造一张百万行的表。

SQL> insert into emp2 select * from emp2;

1032192 rows inserted

如上所示,构造完成

接下来连续运用多个LIKE查询来模糊匹配

SQL> select * from emp2 where job like '%RE%' and ename like '%A%' and mgr like '%3%';

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------

Executed in 1.859 seconds

如上所示,LIKE查询一次,就走一次全表扫描,效率非常慢

同样的效果,现在来换做INSTR函数来执行

SQL> select * from emp where instr(job,'RE')>0 and instr(ename,'A')>0 and instr(mgr,'3')>0;

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------

Executed in 0.063 seconds

看到了吧,,时间上的差异很明显,INSTR在一瞬间执行完成,因为这个是查找的字段,而非走全表扫描

看来,oracle 内部函数效率还是高些。

因此,大家以后碰到同样的问题,除了全文检索外,这个也是个好方式

注意:

    select   id, name from users where instr(id, '101') > 0; 

         等价于

          select   id, name from users where id like '%101%'
分享到:
评论

相关推荐

    oracle like 的优化

    oracle like 的优化,使用索引、反向索引

    SQL优化 '%5400%' LIKE操作符

    COST(按成本优化) RULE(按规则优化) CHOOSE(缺省)(ORACLE自动选择成本或规则进行优化) ALL_ROWS(所有的行尽快返回) FIRST_ROWS(第一行数据尽快返回)

    利用reverse索引优化like语句的方法详解

    主要介绍了关于利用reverse索引优化like语句的方法,文中通过图文介绍的很详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。

    华为公司 java 面试题

    ......... SELECT * FROM TABLE WHERE NAME LIKE '%%' AND ADDR LIKE '%%' AND (1_ADDR LIKE '%%' OR 2_ADDR LIKE '%%' OR 3_ADDR LIKE '%%' OR 4_ADDR LIKE '%%' ) ...........

    python中数据库like模糊查询方式

    sql = “SELECT * FROM table_test WHERE value LIKE ‘%%%%%s%%%%'” % test_value 执行成功,print出SQL语句之后为: SELECT * FROM table_test WHERE value LIKE ‘%%public%%’ Python在执行sql语句的时候,...

    postgresql like模糊查询优化方案

    使用场景: 1. 要求LIKE '%xxx%'模糊查询支持索引,提高数据检索速度 2. 在上一场景的基础上,实现了对多个OR条件语句的索引查询支持

    SQL语句 SELECT LIKE like用法详解SQL语句 SELECT LIKE like用法详解

    SQL语句 SELECT LIKE like用法详解SQL语句 SELECT LIKE like用法详解SQL语句 SELECT LIKE like用法详解

    sql学习 索引去哪儿_like与 %间一波三则的故事.sql

    sql学习 索引去哪儿_like与 %间一波三则的故事.sql

    php mysql like 实现多关键词搜索的方法

    $res = mysql_query(“select * from peter where id like ‘%中草药%’ and ‘%6%'”); //这样写是报错的; $res = mysql_query(“select * from peter where id like ‘%中草药%’ or ‘%6%'”); //而这样写是正确...

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

    问题:明明建立了索引,为何Like模糊查询速度还是特别慢? Like是否使用索引?  1、like %keyword 索引失效,使用全表扫描。但可以通过翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全表扫描。 ...

    Mybatis中的like模糊查询功能

    主要介绍了Mybatis中的like模糊查询功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    SQL中like的用法

    SQL语句 SELECT LIKE like用法详解 包含你不知道的用法 在SQL结构化查询语言中,LIKE语句有着至关重要的作用。

    Quartz中的cron-like表达式解析 cron-like unix-like c#

    Quartz中的cron-like表达式解析 cron-like unix-like c#

    mysql数据库sql优化

    1.1.8. 策略8.Like查询要当心 7 1.1.9. 策略9.字符类型加引号 8 1.1.10. 策略10.OR改UNION效率高 9 1.1.11. 测试题 9 1.2. 批量导入 11 1.2.1. insert语句优化; 11 1.2.2. LOAD DATA INFLIE 11

    解决MySql大数据Like查询慢的问题

    MySql查询数据慢可以用用这个工具,瞬间提升Like查询效率

    mysql优化之like和=性能详析

    主要给大家介绍了关于mysql优化之like和=性能的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    高并发基础之-MySql性能优化.pdf

    优化是多方面的,包括查询优化、更新优化、服务器优化等很多方面。没有特定方 式特定的方法,总是要具体场景,具体分析,但是我们要掌握基本的优化手段。 原则:减少系统瓶颈,减少资源占用,增加系统的反应速度。 ...

    someone like you吉他谱

    someone like yousomeone like yousomeone like yousomeone like yousomeone like you

    有关于oracle数据库的sql优化

     任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。  2. 联接列  对于有联接的列,即使最后的联接值为一个静态值,优化器是不会使用索引的。我们一起来看一个例子,假定有一个职工表...

    More Speak English Like an American

    More Speak English Like an American :Learn More Idioms & Expressions That Will Help You Speak Like a Native!

Global site tag (gtag.js) - Google Analytics