Oracle SQL优化2
Oracle SQL 的优化规
一:尽量少用IN操作符,基本上所有的IN操作符都可以用EXISTS代替 ,用IN写出来的SQL,的优点是比较容易写及清晰易懂,但是用IN的SQL
性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:
ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。由此可见用 IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL
就不能转换了。
Oracle在执行IN子查询时,首先执行子查询,将查询结果放入临时表再执行主查询。而EXIST则是首先检查主查询,然后运行子查询直到找到第一个匹配项。NOT EXISTS比NOT IN效率稍高。但具体在选择IN或EXIST操作时,要根据主子表数据量大小来具体考虑。
推荐方案:在业务密集的SQL当中尽量不采用IN操作符。不用NOT IN操作符,可以用NOT EXISTS或者外连接(+) 替代此操作
二: 推荐方案:用NOT EXISTS 或(外连接+判断为空)方案代替
不用“<>”或者“!=”操作符。对不等于操作符的处理会造成全表扫描,可以用“<” or “>”代替
不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。
推荐方案:用其它相同功能的操作运算代替,如:
1)a<>0 改为 a>0 or a<0
2)a<>’’“ 改为 a>“”
比如:表A里面的一个字段叫做MOBILE 里面存的记录如下
1
2
3
4
表B里面的一个字段也叫做MOBILE里面存的记录如下
1
2
相关文档:
Oracle内存结构与实例及其管理
1、 内存结构:
Oracle数据库的总体结构如下图:
每个Oracle数据库都是由Oracle Instance(实例)与数据库(数据文件,控制文件、重做日志文件)组成,其中所谓实例就是用户同数据库交互的媒介,用户通过于一个实例相连来操作数据库。而实例又是由统一的内存结构(SGA,PGA,UGA)和 ......
Oracle 服务进程-简单介绍
以Orcale10g的版本为例,简单介绍下Oracle的服务进程(Windows版本) -ganlan。
1、OracleCSService
进程:ocssd.exe
介绍:Cluster Synchronization Services (CSS)—Manages the cluster configuration by controlling which nodes are members of the cluster an ......
经常用oracle的人对下面的这条信息肯定不会陌生:“监听程序当前无法识别链接描述符中请求的服务”。其实产生这个问题的根本原因不是监听没有起来,而是监听没有监听你要连接的oracle实例。
大家都明白,oracle只有两者兼备才能向外界提供服务:一个是监听,用于接 ......
脚本1:
SELECT NAME
,value
,description
from ( --GV$SYSTEM_PARAMETER
SELECT x.inst_id as instance
,x.indx+1
,ksppinm as NAME
,ksppity
,ksppstvl as value
,ksppstdf as isdefault& ......
Oracle Purchasing不能查看PO或開PO,並且用戶有權限開PO。這樣情況可能有不少同仁也遇上類似問題。具體情況如下圖:
首先,查看用 ......