`
java-admin
  • 浏览: 1364995 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

Oracle SQL 语句中对Like的优化

阅读更多
[color=red]1、尽量不要使用 like '%..%'
2、对于 like '..%..' (不以 % 开头),Oracle可以应用 colunm上的index
3、对于 like '%...' 的 (不以 % 结尾),可以利用 reverse + function index 的形式,变化成 like '..%' 代码
[/color]

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

SQL> select reverse('123') from dual;
REVERSE('123')
--------------------------------
321
1 row selected.

SQL> create table test_like as select object_id,object_name from dba_objects;
Table created.

SQL> create index test_like__name on test_like(object_name);
Index created.

SQL> create index test_like__name_reverse on test_like(reverse(object_name));
Index created.

SQL> analyze table test_like compute statistics for table for all indexes;
Table analyzed.

SQL> set autot trace

--常量开头的like , 会利用index ,没问题......
SQL> select * from test_like where object_name like AS%';
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=655 Bytes=15720)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST_LIKE' (Cost=2 Card=655Bytes=15720)
2 1 INDEX (RANGE SCAN) OF 'TEST_LIKE__NAME' (NON-UNIQUE) (Cost=2 Card=118)

-- 开头和结尾都是%,对不起,很难优化

SQL> select * from test_like where object_name like '%%';

Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=655 Bytes=15720)
1 0 TABLE ACCESS (FULL) OF 'TEST_LIKE' (Cost=6 Card=655 ytes=15720)

-- 以常量结束,直接写的时候是不能应用index的
SQL> select * from test_like where object_name like '%S';
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=6 Card=655 Bytes=15720)
1 0 TABLE ACCESS (FULL) OF 'TEST_LIKE' (Cost=6 Card=655 Bytes=15720)

--'以常量结束的,加个reverse 函数,又可以用上index了'
SQL> select * from test_like where reverse(object_name)like reverse('%AS');
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE (Cost=2 Card=655 Bytes=15720)
1 0 TABLE ACCESS (BY INDEX ROWID) OF 'TEST_LIKE' (Cost=2 Card=655 Bytes=15720)
2 1 INDEX (RANGE SCAN) OF 'TEST_LIKE__NAME_REVERSE' (NON-UNIQUE) (Cost=2 Card=118)
分享到:
评论

相关推荐

    Oracle数据库Sql语句详解大全

    写一条SELECT查询语句 在查询中使用表达式、运算符 对空值的处理 对查询字段起别名 查询字段的连接 第二章 条件查询 WHERE条件查询 在查询中使用表达式、运算符 使用LIKE、BETWEEN、IN进行模糊查询 第三章 单行...

    有关于oracle数据库的sql优化

     当采用下面这种SQL语句的编写,Oracle系统就可以采用基于last_name创建的索引。 *** where first_name ='Beill' and last_name ='Cliton'; . 带通配符(%)的like语句  同样以上面的例子来看这种情况。目前的...

    ORACLE SQL性能优化系列

    为了不重复解析相同的SQL语句,在第一次解析之后, ORACLE将SQL语句存放在内存中.这块位于系统全局区域SGA(system global area)的共享池(shared buffer pool)中的内存可以被所有的数据库用户共享. 因此,当你执行一个...

    Sql 语句详解

    11. SQL LIKE 操作符 15 12. SQL 通配符 16 13. SQL IN 操作符 18 14. SQL BETWEEN 操作符 18 15. SQL Alias(别名) 19 16. SQL JOIN 20 17. SQL INNER JOIN 关键字 22 18. SQL LEFT JOIN 关键字 23 19. SQL RIGHT ...

    LECCO SQL Expert (智能自动SQL优化)

    图1 人工智能自动SQL优化示意图 其核心模块之一“SQL语法优化器”的工作原理大致如下(如图1): 一条源SQL语句输入→“人工智能反馈式搜索引擎”对输入的SQL语句结合检测到的数据库结构和索引进行重写,产生N条等效...

    ORACLE_SQL语句优化技术分析11

    2、 联接列 ‘||’ 3、带通配符(%)的like语句 7、<> 操作符(不等于) 8、> 及 操作符(大于或小于操作符)

    oracle 下like 语句的几种优化方式加实验,实际生产环境。体验真棒。

    oracle 下like 语句的几种优化方式加实验,实际生产环境。体验真棒。

    经典SQL语句大全

    10、说明:几个简单的基本的sql语句 选择:select * from table1 where 范围 插入:insert into table1(field1,field2) values(value1,value2) 删除:delete from table1 where 范围 更新:update table1 set field1...

    oracle中得到一条SQL语句的执行时间的两种方式

    oracle中如果需要得到一条SQL语句的执行时间可以用如下2种方式 代码如下: SQL> set timing on; SQL> select count(*) from wea; COUNT(*) ———- 39490 已用时间: 00: 00: 00.06 SQL> select sql_text, elapsed_...

    SQL语句优化技术分析

    SQL语句优化,性能提高!LIKE操作符 UNION操作符IN 操作符  用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。  但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL...

    影响sql语句查询效率的因素

    列出一些oracle查询影响查询速度的因素

    sql的like用法

    使用sql语句的like语句。适合10g数据库使用。

    SQL 优化原则

    但是,如果在SQL语句的where子句中写的SQL代码不合理,就会造成优化器删去索引而使用全表扫描,一般就这种SQL语句就是所谓的劣质SQL语句。在编写SQL语句时我们应清楚优化器根据何种原则来删除索引,这有助于写出高...

    经典全面的SQL语句大全

    经典SQL语句大全 下列语句部分是Mssql语句,不可以在access中使用。  SQL分类:  DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)  DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)  DCL—数据控制...

    Oracle数据库、SQL

    七、 SQL语句中的分支 15 7.1分支表达式 15 7.2分支函数 15 八、 组函数 16 8.1报表统计常用 16 8.2缺省情况组函数处理什么值 16 8.3当组函数要处理的所有值都为null时 16 8.4行级信息和组级信息 16 九、 group by...

    SQL语句大全 珍藏版2019-02-28

    显示第一个语句中不在第二个语句中的项 [SQL 语句 1] MINUS [SQL 语句 2] (21) Concatenate................................... ............... ...............................12 结果相加(串联) MySQL/Oracle...

    SQL语句教程.pdf

    SQL 指令 SELECT DISTINCT WHERE AND OR IN BETWEEN ...是,虽然要对 SQL 有很透彻的了解并不是一朝一夕可以完成的,可是要对 SQL 有个基本 的了解并不难。希望在看完这个网站后,您也会有同样的想法。

    Oracle如何实现like多个值的查询

    主要给大家介绍了关于Oracle如何实现like多个值的查询的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    oracle 语句

    @d:D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\utlxplan.sql—创建了索引查询表 explain plan for select ename,job,sal,comm from empcon where (sal-700);--已解释 desc plan_table; col id for 999 col ...

    精通sql结构化查询语句

    1.5 SQL开发环境 1.5.1 SQL环境介绍 1.5.2 SQL的层次结构 1.5.3 SQL环境中的对象 1.5.4 SQL环境中的程序系统 1.6 SQL语句基础 1.6.1 SQL常量 1.6.2 SQL表达式 1.6.3 SQL数据类型 1.6.4 注释符 1.6.5 批处理 1.6.6 ...

Global site tag (gtag.js) - Google Analytics