`

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 的优化

    针对上述问题,本文将详细介绍几种有效的LIKE优化方法。 ##### 1. 避免使用 `LIKE '%%'` **问题分析**:当LIKE语句中的模式包含前导“%”,如`LIKE '%XYZ%'`时,Oracle数据库很难直接利用索引来加速查询过程。这是...

    OracleSQL的优化.pdf

    Oracle SQL 优化 Oracle SQL 优化是数据库性能优化的关键部分。为了提高数据库的性能,我们需要从五个方面进行调整:去掉不必要的大型表的全表扫描、缓存小型表的全表扫描、检验优化索引的使用、检验优化的连接技术...

    oracle语句优化.docx

    本文将详细地介绍 Oracle 语句优化的方法和技巧,涵盖多表关联、EXISTS 和 IN 语句的使用、INDEX_JOIN 优化、WHERE 和 HAVING 语句的区别、NOT IN 和 <> 操作符的使用、LIKE 操作符的替代、UNION 操作符的优化、SQL ...

    oracle查询优化

    ### Oracle 查询优化详解 在数据库管理系统中,Oracle是一款非常成熟且功能强大的关系型数据库系统,广泛应用于企业级应用。为了提高系统的性能与响应速度,进行有效的Oracle查询优化至关重要。本文将从多个方面...

    oracle基础优化

    - **Oracle优化器概述**:Oracle数据库提供了三种优化器来决定SQL语句的执行计划:基于规则的优化器(Rule-based Optimizer, RBO),基于成本的优化器(Cost-based Optimizer, CBO)和选择性优化器(Choose-based ...

    Oracle查询优化改写技巧与案例

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其性能优化是DBA和开发人员日常工作中不可或缺的部分。查询优化是提高数据库性能的关键环节,通过合理的查询改写,可以显著提升数据检索速度,降低系统资源...

    Oracle Sql 优化

    ### Oracle SQL 优化详解 #### 一、Oracle SQL优化的重要性 在系统开发初期,由于数据库数据量较小,可能不会明显感受到不同SQL语句编写方式带来的性能差异。然而,当系统投入实际应用,尤其是面对海量数据时,SQL...

    Oracle SQL性能优化技巧总结

    ### Oracle SQL性能优化技巧总结 #### 一、选择最有效率的表名顺序 在Oracle数据库中,SQL语句的执行顺序对查询性能有着显著的影响。对于基于规则的优化器而言,FROM子句中表的顺序至关重要。Oracle的解析器会按照...

    ORACLE SQL 优化 存储过程 PROCEDURE

    ORACLE SQL 优化存储过程 PROCEDURE ORACLE SQL 优化存储过程 PROCEDURE 是一篇结合实际开发经验和理论知识的文章,旨在帮助开发者提高 SQL 开发效率和优化存储过程。文章涵盖了广泛的知识点,从基本的 SQL 语句到...

    Oracle数据库的查询优化

    ### Oracle数据库的查询优化 #### 一、何时需要考虑查询优化 在开发应用程序时,编写高效、优化的SQL语句对于提升系统性能至关重要。当遇到以下情况时,应该重点考虑查询优化: - **表连接**: 当查询涉及到多张表...

    oracle查询语句优化

    ### Oracle查询语句优化知识点详解 #### 一、概述 Oracle数据库因其强大的功能和灵活性,在企业级应用中占据着重要地位。随着业务的发展,数据库的数据量急剧增长,如何提高查询效率成为了亟需解决的问题之一。本文...

    ORACLE存储过程性能优化技巧

    ### ORACLE存储过程性能优化技巧 #### 一、概述 在数据库管理中,ORACLE存储过程的性能优化是一项至关重要的工作。高效的存储过程不仅能提升应用系统的响应速度,还能减少服务器资源的消耗,提高整体系统性能。...

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

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

    Oracle优化策略

    ### Oracle优化策略详解 #### 一、选用适合的Oracle优化器 在Oracle数据库中,优化器的选择对于查询性能有着至关重要的影响。Oracle提供了三种优化器:基于规则的优化器(Rule-based Optimizer, RBO)、基于成本的...

    oracle管理及优化文档 粗略整理

    ### Oracle管理及优化知识点 #### 一、SQL优化原则与实践 ##### 1. 尽量减少使用 IN - **原因分析**:使用`IN`会导致数据库无法有效地利用索引,尤其是在`IN`后面的列表非常长的情况下,可能导致性能显著下降。 -...

    有关于oracle数据库的sql优化

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

    Oracle中的优化器如何进行评估优化

    Oracle数据库的优化器是其性能的关键组成部分,它负责选择执行SQL查询的最佳路径。优化器通过评估不同的执行计划,以确保数据检索的效率。在优化过程中,优化器会尝试各种策略,包括重写表达式和转换SQL结构,以提高...

    oracle SQL优化实例

    ### Oracle SQL优化实例详解 #### 一、减少I/O操作 在Oracle数据库中,I/O操作通常是查询执行过程中最耗时的部分之一。因此,减少I/O操作可以显著提高查询性能。 **示例代码:** ```sql SELECT COUNT(CASE WHEN ...

Global site tag (gtag.js) - Google Analytics