鷹翔宇空

          學習和生活

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

          ORACLE SQL性能優化系列 (六)

          作者: black_snail

           

          關鍵字 ORACLE PERFORMANCE TUNING SQL

          出處 http://www.dbasupport.com



          20. 用表連接替換EXISTS


          通常來說 , 采用表連接的方式比EXISTS更有效率

          SELECT ENAME

          FROM EMP E

          WHERE EXISTS (SELECT ‘X'

          FROM DEPT

          WHERE DEPT_NO = E.DEPT_NO

          AND DEPT_CAT = ‘A');


          (更高效)

          SELECT ENAME

          FROM DEPT D,EMP E

          WHERE E.DEPT_NO = D.DEPT_NO

          AND DEPT_CAT = ‘A' ;


          (譯者按: 在RBO的情況下,前者的執行路徑包括FILTER,后者使用NESTED LOOP)



          21. 用EXISTS替換DISTINCT

          當提交一個包含一對多表信息(比如部門表和雇員表)的查詢時,避免在SELECT子句中使用DISTINCT. 一般可以考慮用EXIST替換


          例如:

          低效:

          SELECT DISTINCT DEPT_NO,DEPT_NAME

          FROM DEPT D,EMP E

          WHERE D.DEPT_NO = E.DEPT_NO

          高效:

          SELECT DEPT_NO,DEPT_NAME

          FROM DEPT D

          WHERE EXISTS ( SELECT ‘X'

          FROM EMP E

          WHERE E.DEPT_NO = D.DEPT_NO);


          EXISTS 使查詢更為迅速,因為RDBMS核心模塊將在子查詢的條件一旦滿足后,立刻返回結果.



          22. 識別'低效執行'的SQL語句


          用下列SQL工具找出低效SQL:

          SELECT EXECUTIONS , DISK_READS, BUFFER_GETS,

          ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio,

          ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run,

          SQL_TEXT

          FROM V$SQLAREA

          WHERE EXECUTIONS>0

          AND BUFFER_GETS > 0

          AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8

          ORDER BY 4 DESC;


          (譯者按: 雖然目前各種關于SQL優化的圖形化工具層出不窮,但是寫出自己的SQL工具來解決問題始終是一個最好的方法)



          23. 使用TKPROF 工具來查詢SQL性能狀態


          SQL trace 工具收集正在執行的SQL的性能狀態數據并記錄到一個跟蹤文件中. 這個跟蹤文件提供了許多有用的信息,例如解析次數.執行次數,CPU使用時間等.這些數據將可以用來優化你的系統.


          設置SQL TRACE在會話級別: 有效


          ALTER SESSION SET SQL_TRACE TRUE


          設置SQL TRACE 在整個數據庫有效仿, 你必須將SQL_TRACE參數在init.ora中設為TRUE, USER_DUMP_DEST參數說明了生成跟蹤文件的目錄


          (譯者按: 這一節中,作者并沒有提到TKPROF的用法, 對SQL TRACE的用法也不夠準確, 設置SQL TRACE首先要在init.ora中設定TIMED_STATISTICS, 這樣才能得到那些重要的時間狀態. 生成的trace文件是不可讀的,所以要用TKPROF工具對其進行轉換,TKPROF有許多執行參數. 大家可以參考ORACLE手冊來了解具體的配置. )

                                                                             《上一頁》  |  《下一頁》


          posted on 2006-02-25 11:41 TrampEagle 閱讀(514) 評論(0)  編輯  收藏 所屬分類: 技術文摘
          主站蜘蛛池模板: 武胜县| 永嘉县| 岳普湖县| 都昌县| 蓬安县| 司法| 鄯善县| 藁城市| 巴马| 临潭县| 宁乡县| 开封县| 进贤县| 桃园市| 凉城县| 大兴区| 罗田县| 洞头县| 凤山县| 招远市| 灵寿县| 镇平县| 天镇县| 青岛市| 金昌市| 铜山县| 新田县| 云龙县| 读书| 龙江县| 郧西县| 贵港市| 湟中县| 西安市| 德江县| 青岛市| 海盐县| 佛坪县| 宾阳县| 夏邑县| 余姚市|