oracle提供了多種方法用於減少花在剖析oracle sql表示式上的時間,在執行帶有大量執行計畫的複雜查詢時剖析過程會拖累系統的效能。現在我們來簡要地看看這些方法中的幾種。
1、使用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子句所列出的順序來評估**。
2、使用theordered_predicates
ordered_predicates提示在查詢的where子句裡指定的,並被用來指定布林判斷(boolean predicate)被評估的順序。在沒有ordered_predicates的情況下,oracle會使用下面這些步驟來評估sql判斷的順序:
子查詢的評估先於外層where子句裡的boolean條件。
所有沒有內建函式或者子查詢的布林條件都按照其在where子句裡相反的順序進行評估,即最後一條判斷最先被評估。
每個判斷都帶有內建函式的布林判斷都依據其預計的評估值按遞增排列。
3、限制**合併評估的數量
提高sql剖析效能的最後一種方法是強制取代oracle的乙個引數,這個引數控制著在評估乙個查詢的時候,基於消耗的優化器所評估的可能合併數量。
optimizer_search_limit這個引數會指定**合併組合的最大數量,後者將會在oracle試圖確定合併多**最佳方式的時候被評估。這個引數有助於防止優化器花更多的時間來評估可能的合併順序,而不是把時間花在尋找最佳合併順序上。optimizer_search_limit還控制著用於呼叫star join提示的闕值,當查詢裡的**數量低於optimizer_search_limit(其預設的值是5)的時候,star提示就會被光顧。
提高python執行效率的方法
python上手很容易,但是在使用過程中,怎麼才能使效率變高呢?下面說一下提高python執行效率的方法,這裡只是說一點,python在引入模組過程中提高效率的方法。例如 1.我們要使用os模組中的某個屬性,那我們可以單獨引入os中某個屬性 from os import version 同樣的我們也...
批處理SQL語句的執行效率提高的方法
如果專案要求程式對高達幾萬條的資料在集中的時間內執行固定序列的操作,且不能完全使用儲存過程時而需要使用程式來執行時。會需要這些優化。我們知道,sql伺服器對一條語句的執行,需要分析 編譯 執行這些步驟,通過引數化我們可以對一種命令只分析和編譯一次,而執行多次,從而提高效率。在執行時,如果每次提交語句...
提高PHP的執行效率的方法
php的優點之一是速度很快,對於一般的 應用,可以說是已經足夠了。不過如果站點的訪問量很高 帶寬窄或者其它的因素令伺服器產生效能瓶頸的時候,你可能得想想其它的辦法來進一步提高php的速度了。1.優化 1 用i 1代替i i 1。符合c c 的習慣,效率還高。2 盡可能的使用php內部函式。自己編寫函...