打印本文 打印本文 关闭窗口 关闭窗口
ORACLESQL性能优化系列(十四)完结篇
作者:武汉SEO闵涛  文章来源:敏韬网  点击数2485  更新时间:2009/4/22 23:22:13  文章录入:mintao  责任编辑:mintao
带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎

执行耗费资源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序.

例如,一个UNION查询,其中每个查询都带有GROUP BY子句, GROUP BY会触发嵌入排序(NESTED SORT) ; 这样, 每个查询需要执行一次排序, 然后在执行UNION时, 又一个唯一排序(SORT UNIQUE)操作被执行而且它只能在前面的嵌入排序结束后才能开始执行. 嵌入的排序的深度会大大影响查询的效率.

通常, 带有UNION, MINUS , INTERSECT的SQL语句都可以用其他方式重写.

译者按:

     如果你的数据库的SORT_AREA_SIZE调配得好, 使用UNION , MINUS, INTERSECT也是可以考虑的, 毕竟它们的可读性很强

 

 

49.       优化GROUP BY

提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉.下面两个查询返回相同结果但第二个明显就快了许多.

 

低效:

   SELECT JOB , AVG(SAL)

   FROM EMP

   GROUP JOB

   HAVING JOB = ‘PRESIDENT’

   OR JOB = ‘MANAGER’

 高效:

   SELECT JOB , AVG(SAL)

   FROM EMP

   WHERE JOB = ‘PRESIDENT’

   OR JOB = ‘MANAGER’

   GROUP JOB

     

译者按:

     本节和14节相同. 可略过.

 

50.       使用日期

当使用日期是,需要注意如果有超过5位小数加到日期上, 这个日期会进到下一天!

 

例如:

1.

SELECT TO_DATE(‘01-JAN-93’+.99999)

FROM DUAL;

 

Returns:

   ’01-JAN-93 23:59:59’

2.

SELECT TO_DATE(‘01-JAN-93’+.999999)

FROM DUAL;

 

Returns:

   ’02-JAN-93 00:00:00

 

译者按:

    虽然本节和SQL性能优化没有关系, 但是作者的功力可见一斑

   

51.  

上一页  [1] [2] [3]  下一页

打印本文 打印本文 关闭窗口 关闭窗口