Vincent.Chan‘s Blog

          常用鏈接

          統計

          積分與排名

          網站

          最新評論

          ORACLE SQL性能優化系列 (五)

          ORACLE SQL性能優化系列 (五)

          作者: black_snail

           

          關鍵字 ORACLE PERFORMANCE SQL TUNING

          出處 http://WWW.DBASUPPORT.COM



          17. 使用表的別名(Alias)

          當在SQL語句中連接多個表時, 請使用表的別名并把別名前綴于每個Column上.這樣一來,就可以減少解析的時間并減少那些由Column歧義引起的語法錯誤.


          (譯者注: Column歧義指的是由于SQL中不同的表具有相同的Column名,當SQL語句中出現這個Column時,SQL解析器無法判斷這個Column的歸屬)


          18. 用EXISTS替代IN

          在許多基于基礎表的查詢中,為了滿足一個條件,往往需要對另一個表進行聯接.在這種情況下, 使用EXISTS(或NOT EXISTS)通常將提高查詢的效率.


          低效:

          SELECT *

          FROM EMP (基礎表)

          WHERE EMPNO > 0

          AND DEPTNO IN (SELECT DEPTNO

          FROM DEPT

          WHERE LOC = ‘MELB')


          高效:

          SELECT *

          FROM EMP (基礎表)

          WHERE EMPNO > 0

          AND EXISTS (SELECT ‘X'

          FROM DEPT

          WHERE DEPT.DEPTNO = EMP.DEPTNO

          AND LOC = ‘MELB')


          (譯者按: 相對來說,用NOT EXISTS替換NOT IN 將更顯著地提高效率,下一節中將指出)



          19. 用NOT EXISTS替代NOT IN

          在子查詢中,NOT IN子句將執行一個內部的排序和合并. 無論在哪種情況下,NOT IN都是最低效的 (因為它對子查詢中的表執行了一個全表遍歷). 為了避免使用NOT IN ,我們可以把它改寫成外連接(Outer Joins)或NOT EXISTS.


          例如:

          SELECT …

          FROM EMP

          WHERE DEPT_NO NOT IN (SELECT DEPT_NO

          FROM DEPT

          WHERE DEPT_CAT='A');


          為了提高效率.改寫為:


          (方法一: 高效)

          SELECT ….

          FROM EMP A,DEPT B

          WHERE A.DEPT_NO = B.DEPT(+)

          AND B.DEPT_NO IS NULL

          AND B.DEPT_CAT(+) = ‘A'



          (方法二: 最高效)

          SELECT ….

          FROM EMP E

          WHERE NOT EXISTS (SELECT ‘X'

          FROM DEPT D

          WHERE D.DEPT_NO = E.DEPT_NO

          AND DEPT_CAT = ‘A');

          posted on 2006-02-25 22:30 Vincent.Chen 閱讀(150) 評論(0)  編輯  收藏 所屬分類: Database

          主站蜘蛛池模板: 双辽市| 庆阳市| 万年县| 彭泽县| 黄山市| 聂荣县| 寻乌县| 贵州省| 肃宁县| 通河县| 墨脱县| 铁岭县| 浙江省| 乌兰浩特市| 沙河市| 阜平县| 克东县| 平罗县| 德昌县| 宁远县| 蚌埠市| 酒泉市| 枣庄市| 台南市| 汝南县| 舞阳县| 昌平区| 嵊泗县| 白银市| 彭山县| 奈曼旗| 临邑县| 广西| 方山县| 华容县| 北川| 镇宁| 永宁县| 尉犁县| 彩票| 孟村|