鷹翔宇空

          學習和生活

          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 閱讀(488) 評論(0)  編輯  收藏 所屬分類: 技術文摘
          主站蜘蛛池模板: 廉江市| 成武县| 遵义市| 屏山县| 岳西县| 黑水县| 高阳县| 繁昌县| 米林县| 自贡市| 神农架林区| 宁远县| 陕西省| 永春县| 东丽区| 高唐县| 岳阳市| 天祝| 安化县| 莎车县| 东源县| 武乡县| 威远县| 额敏县| 周口市| 盈江县| 五台县| 如皋市| 广元市| 资中县| 库车县| 凤山市| 马关县| 剑阁县| 青川县| 渝北区| 苍山县| 奉新县| 桂东县| 常山县| 建昌县|