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
本文将讨论优化器如何评估优化如下的情况和表达式:常量 LIKE 操作符 IN 操作符 ANY和SOME 操作符 ALL 操作符 BETWEEN 操作符 NOT 操作符;传递(Transitivity) 确定性(DETERMINISTIC)函数。
自己常用的oracle 管理 优化 /** 优化 1。尽量少用in 2。尽量用not exists 或者外连接替代 not in 操作符。因为not in不能 应用表的索引 3。尽量不用<> 或者!= 操作符。不等于操作符是永远不会用到索引的,...
查询条件中尽量不要使用不等于操作符(!=),不等于操作符会限制索引,引起全表扫描,尽量把不等于操作符改成or(or语句使用不当会引起全表扫描,例如where子句中比较的两个条件,一个有索引,一个没索引,使用or则...
基本的Sql编写注意事项 尽量少用IN操作符,基本上所有的IN操作符都可以用EXISTS代替 用IN写出来的SQL的优点是比较容易写及清晰易懂,但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的...
操作符优化: IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。 但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别: ...
COST(按成本优化) RULE(按规则优化) CHOOSE(缺省)(ORACLE自动选择成本或规则进行优化) ALL_ROWS(所有的行尽快返回) FIRST_ROWS(第一行数据尽快返回)
2、 联接列 ‘||’ 3、带通配符(%)的like语句 7、<> 操作符(不等于) 8、> 及 操作符(大于或小于操作符)
一、操作符优化 1、IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别: ...
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常用命令 一、ORACLE的启动和关闭 1、在单机环境下 要想启动或关闭ORACLE系统必须首先切换到ORACLE用户,如下 su - oracle a、启动ORACLE系统 oracle>svrmgrl SVRMGR>connect internal SVRMGR>startup ...
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 类型 ...
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 ...
还包含比较操作符,如>, <, NOT, BETWEEN, IN等。 Oracle监控器 ——该组件能够监控您Direct Oracle Access程序的数据库访问行为。可以显示每个行为的SQL、变量、时间戳、逝去时间、网络统计表、数据库统计表和查询...
(2) 练习标准SQL的数据操作,查询命令及其查询优化。 (3) 学会使用高级SQL命令,排序、分组、自连接查询等。 (4) 学会使用SQL*PLUS命令显示报表,存储到文件等。 【实验内容】 一、 准备使用SQL*PLUS 1. 进入SQL*...
LIKE操作符 UNION操作符IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。 但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别
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 本地网络...
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 查询索引...........