在Oracle里加快SQL執行的三種方法
Oracle提供了多種方法用於減少花在剖析表示式上的時間,在執行帶有大量執行計劃的複雜查詢時剖析過程會拖累系統的效能。現在我們來簡要地看看這些方法中的幾種。
使用ordered提示
Oracle必須花費大量的時間來剖析多表格的合併,用以確定表格合併的最佳順序。如果SQL表示式涉及七個乃至更多的表格合併,那麼有時就會需要超過30分鐘的時間來剖析,因為Oracle必須評估表格合併所有可能的順序。八個表格就會有40,000多種順序。Ordered這個提示(hint)和其他的提示一起使用能夠產生合適的合併順序。
Ordered這個提示會要求列在SQL表示式FROM字句裡的表格按照指定的順序進行合併,FROM字句裡的第一個表格會指定驅動表格(driving table)。驅動表格應該是返回最小行數的表格。使用ordered提示會跳過非常耗時和耗資源的剖析操作,並加快Oracle SQL的執行。
Listing A如下:
Listing A
select /*+ ordered use_nl(bonus)
parallel(e, 4) */ e.ename, hiredate, b.comm from emp e, bonus b
where e.ename = b.ename ;
Listing A裡是一個複雜查詢的例子,這個查詢被強制進行一個巢狀迴圈,從而與對emp表格進行的並行查詢合併。要注意,我已經使用ordered提示來引導Oracle去按照WHERE子句所列出的順序來評估表格。
使用theordered_predicates
ordered_predicates提示在的WHERE子句裡指定的,並被用來指定布林判斷(Boolean predicate)被評估的順序。在沒有ordered_predicates的情況下,Oracle會使用下面這些步驟來評估SQL判斷的順序:
子查詢的評估先於外層WHERE子句裡的Boolean條件。
所有沒有內建函式或者子查詢的布林條件都按照其在WHERE子句裡相反的順序進行評估,即最後一條判斷最先被評估。
每個判斷都帶有內建函式的布林判斷都依據其預計的評估值按遞增排列。
你可以使用ordered_predicates提示來強制取代這些預設的評估規則,那麼你WHERE子句裡的專案就會按照其在查詢裡出現的順序被評估。在查詢的WHERE子句裡使用了PL/SQL函式的情況下,通常會使用ordered_predicates提示。如果你知道限制最多的判斷並且希望Oracle最先評估這些判斷的時候,在這種情況下,它也是非常有用的。用法提示:你不能使用ordered_predicates提示來儲存對索引鍵進行判斷評估的順序。
限制表格合併評估的數量
提高SQL剖析效能的最後一種方法是強制取代Oracle的一個引數,這個引數控制著在評估一個查詢的時候,基於消耗的最佳化器所評估的可能合併數量。
optimizer_search_limit這個引數會指定表格合併組合的最大數量,後者將會在Oracle試圖確定合併多表格最佳方式的時候被評估。這個引數有助於防止最佳化器花更多的時間來評估可能的合併順序,而不是把時間花在尋找最佳合併順序上。optimizer_search_limit還控制著用於呼叫star join提示的闕值,當查詢裡的表格數量低於optimizer_search_limit(其預設的值是5)的時候,star提示就會被光顧。
以上只是一些Oracle DBA用來最佳化Oracle資料庫應用程式的效能的一些小技巧。
使用ordered提示
Oracle必須花費大量的時間來剖析多表格的合併,用以確定表格合併的最佳順序。如果SQL表示式涉及七個乃至更多的表格合併,那麼有時就會需要超過30分鐘的時間來剖析,因為Oracle必須評估表格合併所有可能的順序。八個表格就會有40,000多種順序。Ordered這個提示(hint)和其他的提示一起使用能夠產生合適的合併順序。
Ordered這個提示會要求列在SQL表示式FROM字句裡的表格按照指定的順序進行合併,FROM字句裡的第一個表格會指定驅動表格(driving table)。驅動表格應該是返回最小行數的表格。使用ordered提示會跳過非常耗時和耗資源的剖析操作,並加快Oracle SQL的執行。
Listing A如下:
Listing A
select /*+ ordered use_nl(bonus)
parallel(e, 4) */ e.ename, hiredate, b.comm from emp e, bonus b
where e.ename = b.ename ;
Listing A裡是一個複雜查詢的例子,這個查詢被強制進行一個巢狀迴圈,從而與對emp表格進行的並行查詢合併。要注意,我已經使用ordered提示來引導Oracle去按照WHERE子句所列出的順序來評估表格。
使用theordered_predicates
ordered_predicates提示在的WHERE子句裡指定的,並被用來指定布林判斷(Boolean predicate)被評估的順序。在沒有ordered_predicates的情況下,Oracle會使用下面這些步驟來評估SQL判斷的順序:
子查詢的評估先於外層WHERE子句裡的Boolean條件。
所有沒有內建函式或者子查詢的布林條件都按照其在WHERE子句裡相反的順序進行評估,即最後一條判斷最先被評估。
每個判斷都帶有內建函式的布林判斷都依據其預計的評估值按遞增排列。
你可以使用ordered_predicates提示來強制取代這些預設的評估規則,那麼你WHERE子句裡的專案就會按照其在查詢裡出現的順序被評估。在查詢的WHERE子句裡使用了PL/SQL函式的情況下,通常會使用ordered_predicates提示。如果你知道限制最多的判斷並且希望Oracle最先評估這些判斷的時候,在這種情況下,它也是非常有用的。用法提示:你不能使用ordered_predicates提示來儲存對索引鍵進行判斷評估的順序。
限制表格合併評估的數量
提高SQL剖析效能的最後一種方法是強制取代Oracle的一個引數,這個引數控制著在評估一個查詢的時候,基於消耗的最佳化器所評估的可能合併數量。
optimizer_search_limit這個引數會指定表格合併組合的最大數量,後者將會在Oracle試圖確定合併多表格最佳方式的時候被評估。這個引數有助於防止最佳化器花更多的時間來評估可能的合併順序,而不是把時間花在尋找最佳合併順序上。optimizer_search_limit還控制著用於呼叫star join提示的闕值,當查詢裡的表格數量低於optimizer_search_limit(其預設的值是5)的時候,star提示就會被光顧。
以上只是一些Oracle DBA用來最佳化Oracle資料庫應用程式的效能的一些小技巧。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-85050/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在Oracle里加快SQL執行的三種方法(轉)OracleSQL
- 在Oracle裡提高SQL執行效率的三種方法NQOracleSQL
- Oracle提高SQL執行效率的三種方法ITOracleSQL
- 在unix下定時執行oracle的sql方法(轉)OracleSQL
- 多種方法檢視Oracle SQL執行計劃OracleSQL
- Linux讓程式在後臺執行的三種方法Linux
- 在本地執行 LLMs 的 6 種方法
- 在oracle中跟蹤會話執行語句的幾種方法Oracle會話
- oracle rac中讓sql語句在指定的節點執行的方法OracleSQL
- Oracle SQL Profile固定執行計劃的方法OracleSQL
- oracle中跟蹤sql執行計劃的方法OracleSQL
- 在 Ruby 中執行 Shell 命令的 6 種方法
- 【執行計劃】Oracle獲取執行計劃的幾種方法Oracle
- Oracle 獲取SQL執行計劃方法OracleSQL
- Oracle 獲取執行計劃的幾種方法Oracle
- Java多執行緒【三種實現方法】Java執行緒
- [ORACLE] SQL執行OracleSQL
- 檢視SQL執行計劃的幾種常用方法YQSQL
- 在 Windows 中執行 Linux 命令的 4 種方法WindowsLinux
- Oracle - 執行過的SQL、正在執行的SQL、消耗資源最多的SQLOracleSQL
- Linux中執行Shell指令碼的方式(三種方法)Linux指令碼
- VC啟動一個新執行緒的三種方法執行緒
- 建立獨立的Java可執行JAR的三種方法 - frankelJavaJAR
- 介紹幾種獲取SQL執行計劃的方法(上)SQL
- 建立執行緒的三種方式執行緒
- 「有點收穫」三種基本方法建立執行緒執行緒
- Linux 讓程式在後臺可靠執行的幾種方法Linux
- 執行truncate在pl/sqlSQL
- Oracle中檢視已執行sql的執行計劃OracleSQL
- 減少SQL日誌的三種方法(轉)SQL
- PHP-FPM 的三種執行模式PHP模式
- 從U盤執行Linux作業系統的三種方法Linux作業系統
- Oracle sql執行計劃OracleSQL
- 檢視Oracle SQL執行計劃方法比較、分析OracleSQL
- sql trace有兩種方法在session級進行trace(轉)SQLSession
- matlab中三種計算程式執行時間方法Matlab
- Linux 技巧:讓程式在後臺可靠執行的幾種方法Linux
- Linux 下讓程式在後臺可靠執行的幾種方法Linux