海鷗航際

          JAVA站
          posts - 11, comments - 53, trackbacks - 1, articles - 102

          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手冊來了解具體的配置. )

          主站蜘蛛池模板: 唐海县| 大英县| 休宁县| 富蕴县| 札达县| 秦皇岛市| 麟游县| 历史| 兰坪| 甘泉县| 佛冈县| 普安县| 邛崃市| 奉新县| 方正县| 辛集市| 上林县| 安远县| 久治县| 开封市| 乐清市| 大姚县| 绥中县| 蓝山县| 读书| 盱眙县| 罗江县| 周至县| 南涧| 连南| 克什克腾旗| 浏阳市| 自治县| 门源| 南涧| 乌鲁木齐市| 霍林郭勒市| 苍梧县| 嘉鱼县| 日照市| 昆山市|