`

介绍一下Oracle的操作符优化

阅读更多

IN :

IN写出来的SQL比较容易写及清晰易懂但是性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:

ORACLE 试图将IN转换成多个表的连接,如果转换不成功会先执行IN里面的子查询,再查询外层的表记录,如果转换成功,则直接采用多个表的连接方式查询。所以用 IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。

推荐方法:在业务密集的SQL当中尽量不要采用IN操作符。

NOT IN:

不推荐使用,因为NOT IN不能应用表的索引。

推荐方案:用NOT EXISTS 或(外连接+判断为空)

<> 操作符(不等于)

不等于操作符不会用到索引的,对它的处理只会产生全表扫描。

推荐方案:用其它相同功能的操作运算代替,如 a<>0 改为 a>0 or a<0  a<>’’ 改为 a>’’

IS NULL 或IS NOT NULL操作(判断字段是否为空)

判断字段是否为空一般不会应用索引,因为B树索引是不索引空值的。

推荐方案:

用其它相同功能的操作运算代替,如 a is not null 改为 a>0 或a>’’等。

不允许字段为空,而用一个缺省值代替空值,如业扩申请中状态字段不允许为空,缺省为申请。

建立位图索引(有分区的表不能建,位图索引比较难控制,如字段值太多索引会使性能下降,多人更新操作会增加数据块锁的现象)。

> 及 < 操作符(大于或小于操作符)

大于或小于操作符一般不用调整,因为它有索引就会采用索引查找,但有的情况下可以对它进行优化,如一个表有100万记录,一个数值型字段A, 30万记录的A=0,30万记录的A=1,39万记录的A=2,1万记录的A=3。那么执行A>2与A>=3的效果就有很大的区别了,因为 A>2时ORACLE会先找出为2的记录索引再进行比较,而A>=3时ORACLE则直接找到=3的记录索引。

LIKE:

LIKE 操作符可以应用通配符查询,里面的通配符组合可能达到几乎是任意的查询,但是如果用得不好则会产生性能上的问题,如LIKE ‘%5400%’ 这种查询不会引用索引,而LIKE ‘X5400%’则会引用范围索引。一个实际例子:用YW_YHJBQK表中营业编号后面的户标识号可来查询营业编号 YY_BH LIKE ‘%5400%’ 这个条件会产生全表扫描,如果改成YY_BH LIKE ’X5400%’ OR YY_BH LIKE ’B5400%’ 则会利用YY_BH的索引进行两个范围的查询,性能肯定大大提高。

分享到:
评论

相关推荐

    oracle操作符优化[参考].pdf

    oracle操作符优化[参考].pdf

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

    本文将讨论优化器如何评估优化如下的情况和表达式:常量 LIKE 操作符 IN 操作符 ANY和SOME 操作符 ALL 操作符 BETWEEN 操作符 NOT 操作符;传递(Transitivity) 确定性(DETERMINISTIC)函数。

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

    自己常用的oracle 管理 优化 /** 优化 1。尽量少用in 2。尽量用not exists 或者外连接替代 not in 操作符。因为not in不能 应用表的索引 3。尽量不用&lt;&gt; 或者!= 操作符。不等于操作符是永远不会用到索引的,...

    oracle优化

    查询条件中尽量不要使用不等于操作符(!=),不等于操作符会限制索引,引起全表扫描,尽量把不等于操作符改成or(or语句使用不当会引起全表扫描,例如where子句中比较的两个条件,一个有索引,一个没索引,使用or则...

    Oracle数据库SQL语句优化策略

    基本的Sql编写注意事项 尽量少用IN操作符,基本上所有的IN操作符都可以用EXISTS代替 用IN写出来的SQL的优点是比较容易写及清晰易懂,但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的...

    ORACLE SQL语句优化技术要点解析

    操作符优化: IN 操作符  用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。  但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:  ...

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

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

    ORACLE_SQL语句优化技术分析11

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

    Oracle数据库SQL语句优化总结

    一、操作符优化  1、IN 操作符  用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别: ...

    Oracle Database 11g初学者指南--详细书签版

    4.11 集合操作符:union、intersect和minus 108 4.11.1 union 109 4.11.2 union all 109 4.11.3 intersect 110 4.11.4 minus 110 4.12 视图 112 4.13 序列 113 4.14 约束:与实体模型的联系、类型、延迟 114...

    最全的oracle常用命令大全.txt

    ORACLE常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle&gt;svrmgrl SVRMGR&gt;connect internal SVRMGR&gt;startup ...

    oracle数据库11G初学者指南.Oracle.Database.11g,.A.Beginner's.Guide

    4.11 集合操作符:union、intersect和minus 4.11.1 union 4.11.2 union all 4.11.3 intersect 4.11.4 minus 4.12 视图 4.13 序列 4.14 约束:与实体模型的联系、类型、延迟 4.14.1 与实体模型的联系 4.14.2 类型 ...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    3.1.1 如何选择全扫描操作 56 3.1.2 全扫描与舍弃 59 3.1.3 全扫描与多块读取 60 3.1.4 全扫描与高水位线 60 3.2 索引扫描访问方法 65 3.2.1 索引结构 66 3.2.2 索引扫描类型 68 3.2.3 索引唯一扫描 71 ...

    Direct Oracle Access v4.1.3 bcb6

    还包含比较操作符,如&gt;, &lt;, NOT, BETWEEN, IN等。 Oracle监控器 ——该组件能够监控您Direct Oracle Access程序的数据库访问行为。可以显示每个行为的SQL、变量、时间戳、逝去时间、网络统计表、数据库统计表和查询...

    oracle实验报告

    (2) 练习标准SQL的数据操作,查询命令及其查询优化。 (3) 学会使用高级SQL命令,排序、分组、自连接查询等。 (4) 学会使用SQL*PLUS命令显示报表,存储到文件等。 【实验内容】 一、 准备使用SQL*PLUS 1. 进入SQL*...

    SQL语句优化技术分析

    LIKE操作符 UNION操作符IN 操作符  用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。  但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别

    oracle数据库dba管理手册

    13.1.1 连接描述符 365 13.1.2 服务名 366 13.1.3 监听程序 367 13.1.4 Oracle8i中的监听程序 368 13.2 使用Net8 Configuration Assistant 369 13.2.1 配置监听程序 370 13.2.2 命名方法配置 371 13.2.3 本地网络...

    oracle学习经典教程

    1.2.1.6.1 使用不等于操作符(、!=)...29 1.2.1.6.2 使用IS NULL 或IS NOT NULL ......30 1.2.1.6.3 使用函数.........30 1.2.1.6.4 比较不匹配的数据类型...............30 1.2.1.7 查询索引...........

Global site tag (gtag.js) - Google Analytics