打印本文 打印本文 关闭窗口 关闭窗口
Oracle常見問題集(四)
作者:武汉SEO闵涛  文章来源:敏韬网  点击数5036  更新时间:2009/4/22 22:05:52  文章录入:mintao  责任编辑:mintao

 

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

 

24. EXPLAIN PLAN 分析SQL語句

EXPLAIN PLAN 是一個很好的分析SQL語句的工具,它甚至可以在不執行SQL的情況下分析語句.

通過分析,我們就可以知道ORACLE是怎麽樣連接表,使用什麽方式掃描表(索引掃描或全表掃描)以及使用到的索引名稱.

你需要按照從裏到外,從上到下的次序解讀分析的結果. EXPLAIN PLAN分析的結果是用縮進的格式排列的,

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ...  下一页 >> 

打印本文 打印本文 关闭窗口 关闭窗口