鷹翔宇空

          學習和生活

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            110 Posts :: 141 Stories :: 315 Comments :: 1 Trackbacks
          引自:http://www.dbonline.cn/source/oracle/20031218/oracle%20SQL%20performance%20tuning5.html

          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 11:40 TrampEagle 閱讀(492) 評論(0)  編輯  收藏 所屬分類: 技術文摘
          主站蜘蛛池模板: 科技| 甘肃省| 屏南县| 墨竹工卡县| 阜新市| 延庆县| 山东省| 福泉市| 阳城县| 成都市| 禄丰县| 延庆县| 涿州市| 和顺县| 天镇县| 赤峰市| 雷山县| 大埔县| 岳阳市| 古蔺县| 林西县| 天全县| 济阳县| 神池县| 汝城县| 平潭县| 沙河市| 中超| 桂东县| 密山市| 什邡市| 乌兰浩特市| 垫江县| 孟村| 东光县| 南昌县| 桐乡市| 荣成市| 衡阳县| 剑川县| 会同县|