`

Oracle like '%...%' 优化

 
阅读更多

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数据库很难直接利用索引来加速查询过程。这是...

    oracle语句优化.docx

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

    Oracle SQL优化.pdf

    ### Oracle SQL优化详解 #### 一、SQL语句编写注意事项 **1. ISNULL与ISNOTNULL** 在WHERE子句中使用`IS NULL`或`IS NOT NULL`时,Oracle优化器通常不会利用索引进行搜索。这是因为`IS NULL`和`IS NOT NULL`检查的...

    OracleSQL的优化.pdf

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

    oracle好东西.txt

    从给定的文件信息中,我们可以总结出一系列与Oracle数据库相关的基础知识点,这些知识点涵盖了SQL语句、数据定义语言(DDL)、数据操作语言(DML)以及查询优化和管理技巧等关键领域。以下是对这些知识点的详细阐述...

    ORACLE数据库设计与优化.docx

    - 避免在特定操作中使用索引,如`NOT IN`, `<>`, `IS NULL`, `IS NOT NULL`, `LIKE '%...%'`,因为这些操作通常不会使用索引。 4. **逻辑设计规范**: - 创建Sequence类型的主键字段,避免使用Identity字段。 - ...

    Oracle动态采样.pdf

    Oracle动态采样是Oracle数据库中一种优化技术,用于解决在复杂查询中由于统计信息不准确导致的执行计划问题。动态采样允许数据库在编译SQL语句时对表进行小规模的数据采样,以获取更准确的行数(cardinality)估计,...

    Oracle-SQL优化.docx

    Oracle SQL 优化 Oracle SQL 优化是指对 Oracle 数据库中的 SQL 语句进行优化,以提高查询效率、减少资源占用和提高系统性能。下面是 Oracle SQL 优化的相关知识点: 一、 SQL 语句编写注意问题 1.1 IS NULL 与 ...

    常用Oracle数据库脚本.txt

    从给定的文件信息中,我们可以提取到一系列与Oracle数据库管理相关的脚本和查询语句...以上脚本和命令为Oracle数据库管理员提供了强大的工具,用于监控数据库运行状态、管理资源、优化性能以及处理常见数据库管理任务。

    【转载】oracle笔试4.doc

    Oracle数据库是世界上最流行的数据库管理系统之一,它在企业级应用中广泛应用。以下是对题目中提到的知识点的详细解释: ...在处理复杂的查询时,了解如何正确使用这些工具可以帮助优化性能,提高数据管理的效率。

    Oracle_adv.zip_Oracle進階_oracle

    本文将深入探讨Oracle 10g中的高级特性,包括正则表达式和SQL优化,帮助你提升数据库管理与开发技能。 一、Oracle 10g正则表达式 正则表达式在Oracle 10g中提供了强大的文本匹配功能,它允许我们以一种简洁的方式...

    Oracle学习笔记.doc

    Oracle支持多种SQL标准,并提供了丰富的功能和工具来管理和优化大型数据库系统。 #### 二、SQLplus概述 - **SQLplus**是Oracle提供的一款交互式命令行工具,用于执行SQL语句并查看结果。它是Oracle数据库管理员和...

    实战Oracle 12c AWR.pdf

    通过深入理解和应用Oracle 12c中的AWR特性,DBA不仅能够有效地监控数据库性能,还能够在出现问题时迅速定位并解决问题,进而实现持续优化数据库的目标。此外,通过合理配置AWR的采样频率、保留时间和采样数据量,还...

    Hadoop数据迁移--从Oracle向Hadoop.zip

    - **性能优化**:考虑到Oracle和Hadoop的处理机制不同,可能需要对数据处理逻辑进行优化,比如减少不必要的数据传输,合理设置Hadoop集群的参数。 - **数据完整性**:确保在迁移过程中数据的完整性和一致性,避免...

    oracle操作符优化.pdf

    Oracle数据库操作符优化是提升数据库性能的关键环节。在SQL查询中,不同的操作符使用会影响查询效率,因此了解并掌握操作符的优化策略是至关重要的。 首先,关于`IN`操作符,虽然它使得SQL语句易于理解和编写,但其...

    Oracle性能查询.ppt

    在Oracle数据库管理中,性能查询优化是至关重要的,因为它直接影响到系统的响应时间和整体效率。本PPT主要讨论了如何分析和优化Oracle性能查询,重点在于理解资源使用、执行情况以及SQL语句的不同类型对系统性能的...

    Oracle数据库讲义.pdf

    - **实验10**:利用LIKE关键字进行模式匹配查询。 - **实验11**:使用ORDER BY子句对查询结果进行排序。 - **实验12**:使用字符串函数(如CONCAT、SUBSTR等)处理字符串数据。 - **实验13**:使用数字函数(如...

    oracle正则表达式.ppt

    Oracle正则表达式是Oracle 10g及后续版本引入的一种强大的文本处理工具,它极大地增强了SQL查询的灵活性。...在10g之后的版本中,Oracle继续优化和扩展了正则表达式支持,使其成为处理和分析文本数据的强大工具。

Global site tag (gtag.js) - Google Analytics