鷹翔宇空

          學(xué)習(xí)和生活

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

          ORACLE SQL性能優(yōu)化系列 (五)

          作者: black_snail

           

          關(guān)鍵字 ORACLE PERFORMANCE SQL TUNING

          出處 http://WWW.DBASUPPORT.COM



          17. 使用表的別名(Alias)

          當(dāng)在SQL語(yǔ)句中連接多個(gè)表時(shí), 請(qǐng)使用表的別名并把別名前綴于每個(gè)Column上.這樣一來(lái),就可以減少解析的時(shí)間并減少那些由Column歧義引起的語(yǔ)法錯(cuò)誤.


          (譯者注: Column歧義指的是由于SQL中不同的表具有相同的Column名,當(dāng)SQL語(yǔ)句中出現(xiàn)這個(gè)Column時(shí),SQL解析器無(wú)法判斷這個(gè)Column的歸屬)


          18. 用EXISTS替代IN

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


          低效:

          SELECT *

          FROM EMP (基礎(chǔ)表)

          WHERE EMPNO > 0

          AND DEPTNO IN (SELECT DEPTNO

          FROM DEPT

          WHERE LOC = ‘MELB')


          高效:

          SELECT *

          FROM EMP (基礎(chǔ)表)

          WHERE EMPNO > 0

          AND EXISTS (SELECT ‘X'

          FROM DEPT

          WHERE DEPT.DEPTNO = EMP.DEPTNO

          AND LOC = ‘MELB')


          (譯者按: 相對(duì)來(lái)說(shuō),用NOT EXISTS替換NOT IN 將更顯著地提高效率,下一節(jié)中將指出)



          19. 用NOT EXISTS替代NOT IN

          在子查詢中,NOT IN子句將執(zhí)行一個(gè)內(nèi)部的排序和合并. 無(wú)論在哪種情況下,NOT IN都是最低效的 (因?yàn)樗鼘?duì)子查詢中的表執(zhí)行了一個(gè)全表遍歷). 為了避免使用NOT IN ,我們可以把它改寫(xiě)成外連接(Outer Joins)或NOT EXISTS.


          例如:

          SELECT …

          FROM EMP

          WHERE DEPT_NO NOT IN (SELECT DEPT_NO

          FROM DEPT

          WHERE DEPT_CAT='A');


          為了提高效率.改寫(xiě)為:


          (方法一: 高效)

          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');


                                                                             《上一頁(yè)》  |  《下一頁(yè)》
          posted on 2006-02-25 11:40 TrampEagle 閱讀(492) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 技術(shù)文摘
          主站蜘蛛池模板: 长春市| 太仆寺旗| 永新县| 民丰县| 那曲县| 方城县| 盐城市| 元朗区| 大埔区| 宁河县| 濮阳市| 梁河县| 丰宁| 东丽区| 农安县| 滦平县| 秦皇岛市| 宁化县| 淳安县| 安平县| 永福县| 仙居县| 资讯 | 万盛区| 宝山区| 北安市| 南木林县| 炎陵县| 西乌珠穆沁旗| 安吉县| 英超| 临沂市| 汉沽区| 淮安市| 仙桃市| 留坝县| 湘西| 石林| 富蕴县| 聂荣县| 廊坊市|