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

          主站蜘蛛池模板: 洞头县| 时尚| 葵青区| 华容县| 兰溪市| 嘉禾县| 太原市| 上杭县| 兴隆县| 阜南县| 抚宁县| 江华| 建昌县| 乌拉特前旗| 黄大仙区| 中超| 昭通市| 宁安市| 泰兴市| 沁源县| 四平市| 大同县| 九寨沟县| 苗栗县| 浦北县| 青浦区| 府谷县| 东阳市| 从江县| 正蓝旗| 高安市| 鹤庆县| 翼城县| 宁乡县| 紫阳县| 察雅县| 水富县| 平果县| 渝北区| 常宁市| 胶南市|