oracle sql优化

 

1.      注意where子句的连接顺序。

由于oracle是自下而上解析where子句,因此对于能过虑掉最多数据的条件应该放在最后面

2.      避免使用*

虽然使用*能比较方便的查询更多的列,但是oracle需要去解析这些列,通过查询数据字典;

    3  使用exists 代替 in

         Where exists (select ‘x’ form a ,b where a.eno=b.eon and a.name=’loc’)

          子查询以‘select 'X'开始。运用EXISTS 子句不管子查询从表中抽取什么数

据它只查看where 子句。这样优化器就不必遍历整个表而仅根据索引就可完成工作(这里假定在where 语句中使用的列存在索引)。

通常对于exists是首先检查主查询,然后去执行子查询直到匹配到条件的项为止,而如果使用in,则会去执行子查询,将子查询放到临时表,并建立索引。然后再去执行主查询。在这个过程中会将主查询挂起。因此比较耗时。

     5使用decode函数来减少时间处理,以及扫描相同的表或记录

    如SELECT COUNT(*),SUM(SAL)

FROM EMP

WHERE DEPT_NO = 0020

AND ENAME LIKE ‘SMITH%’;

 

 

SELECT COUNT(*),SUM(SAL)

FROM EMP

WHERE DEPT_NO = 0030

AND ENAME LIKE ‘SMITH%’;

      

 

select count(decode(dept_no,0020,’X’,NULL))countdepnt_0020 ,sum(dept_no,0020,sal,NULL) sum0020_sal,count(dept_no,0030,’X’,NULL)countdeptnt_0030,sum(dept_no,0030,sal,NULL)

from emp where ename like ‘SMITH%’

4用truncate代替delete

使用delete时,其回滚段存有用来被恢复的信息,如果没有commit的话则可以进行还原,但如果直接使用truncate的话则不会有回滚段信息,直接进行提交,减了资源的占用

5多使用commit

 使用commit能减少资源的占用

6用where 子句替换having子句

由于having子句在检索出所有行后再进行过虑,此过程中有排序,计算等操作比较消耗性能,但如果能用where子句减少条数据的话,则会减少相应的开销.

SELECT REGION,AVG(LOG_SIZE)

FROM LOCATION

GROUP BY REGION

HAVING REGION REGION !=‘SYDNEY’

AND REGION != ‘PERTH’

SELECT REGION,AVG(LOG_SIZE)

FROM LOCATION

Where REGION REGION !=‘SYDNEY’

AND REGION != ‘PERTH’

Group by REGION

7使用表的别名

在使用多表连接查询时,使用表的别名,在查询列前面加上别名,这样能加快解析,并能避免相同的列产生的岐义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值