Oracle中SQL語句執行效率的查詢與解決 (3)

idba發表於2008-05-10
 

SORT- merge JOIN,將兩表的連線列各自排序然後合併,只能用於連線列相等的情況,適合兩表大小相若的情況(在缺乏資料的選擇性或者可用的索引時,或者兩個源表都過於龐大(超過記錄數的5%)時,排序合併連線將比巢狀迴圈連更加高效。但是,排列合併連線只能用於等價連線(WHERE D.deptno=E.dejptno,而不是WHERE D.deptno>=E.deptno)。排列合併連線需要臨時的記憶體塊,以用於排序(如果SORT_AREA_SIZE設定得太小的話)。這將導致在臨時表空間佔用更多的記憶體和磁碟I/O。)

HASH JOIN在其中一表的連線列上作雜湊,因此只有另外一個表做排序合併,理論上比SORT JOIN會快些,需要有足夠的記憶體,而且開啟了SORT_JOIN_ENABLE引數。(當缺少有用的索引時,雜湊連線比巢狀迴圈連線更加有效。雜湊連線可能比排序合併連線更快,因為在這種情況下只有一張源表需要排序。雜湊連線也可能比巢狀迴圈連線更快,因為處理記憶體中的雜湊表比檢索B_樹索引更加迅速。和排序合併連線、群集連線一樣,雜湊連線只能用於等價連線。和排序合併連線一樣,雜湊連線使用記憶體資源,並且當用於排序記憶體不足時,會增加臨時表空間的I/O(這將使這種連線方法速度變得極慢)。最後,只有基於代價的優化器才可以使用雜湊連線。)

BNo2: AUTOTRACE

•set autotrace 使用步驟:

1、以system登入

2、建立plustrace角色; \sqlplus\admin\plustrce.sql

3、向常規使用者授予許可權:grant plustrace to

4、如果沒有plan_table也要建立: \rdbms\admin\utlxplan.sql

• set autotrace 選項

on 顯示查詢結果,執行計劃,統計資料

on statistics 顯示查詢結果,統計資料,不顯示執行計劃

on explain 顯示查詢結果,執行計劃,不顯示統計資料

traceonly 顯示執行計劃和統計結果,但不包括查詢結果

traceonly statistics 僅顯示統計資料

recursive calls 在使用者級別和系統級別上生成的遞迴呼叫的數量。Oracle維護了一些用於內部處理的表。當oracle需要對這些表進行更改時,它就會在內部生成一個SQL語句,然後這個語句再生成一個遞迴呼叫。

db block gets 請求一個CURRENT塊的次數

consistent gets 為一塊請求consistent read的次數

physical reads 從磁碟讀取得資料塊總數。這個數量等於“直接物理讀取”的值加上讀入緩衝區的所有資料塊

redo size 生成的重做的總數量(以位元組為單位)

bytes sent via SQL * Net to client 從前臺程式傳送給客戶的總位元組數

bytes received via SQL * Net from client 通過Oracle Net從客戶接收的總位元組數

SQL*Net roundtrips to/from client 傳送給客戶和從客戶接收的Oracle Net訊息的總數

sorts (memory) 完全在記憶體中執行並且不需要任何磁碟寫入的排序操作的數量

>

db block gets 請求一個CURRENT塊的次數

consistent gets 為一塊請求consistent read的次數

physical reads 從磁碟讀取得資料塊總數。這個數量等於“直接物理讀取”的值加上讀入緩衝區的所有資料塊

redo size 生成的重做的總數量(以位元組為單位)

bytes sent via SQL * Net to client 從前臺程式傳送給客戶的總位元組數

bytes received via SQL * Net from client 通過Oracle Net從客戶接收的總位元組數

SQL*Net roundtrips to/from client 傳送給客戶和從客戶接收的Oracle Net訊息的總數

sorts (memory) 完全在記憶體中執行並且不需要任何磁碟寫入的排序操作的數量

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1384/viewspace-264858/,如需轉載,請註明出處,否則將追究法律責任。

相關文章