Oracle使用的hints調整機制

2021-05-09 19:02:27 字數 2093 閱讀 8606

10g資料庫介紹:可以使用更多新的optimizer hints來控制優化行為。現在讓我們快速解析一下這些強大的新hints:

spread_min_analysis

使用這一hint,你可以忽略一些關於如詳細的關係依賴圖分析等電子**的編譯時間優化規則。其他的一些優化,如建立過濾以有選擇性的定位電子**訪問結構並限制修訂規則等,得到了繼續使用。

由於在規則數非常大的情況下,電子**分析會很長。這一提示可以幫助我們減少由此產生的數以百小時計的編譯時間。

例:

select /*+ spread_min_analysis */ ...

spread_no_analysis

通過這一hint,可以使無電子**分析成為可能。同樣,使用這一hint可以忽略修訂規則和過濾產生。如果存在一電子**分析,編譯時間可以被減少到最低程度。

例:

select /*+ spread_no_analysis */ ...

use_nl_with_index

這項hint使cbo通過巢狀迴圈把特定的**加入到另一原始行。只有在以下情況 中,它才使用特定**作為內部**:如果沒有指定標籤,cbo必須可以使用一些標籤,且這些標籤至少有乙個作為索引鍵值加入判斷;反之,cbo必須能夠使 用至少有乙個作為索引鍵值加入判斷的標籤。

例:

select /*+ use_nl_with_index (polrecpolrind) */ ...

cardinality

此hint定義了對由查詢或查詢部分返回的基數的評價。注意如果沒有定義**,基數是由整個查詢所返回的總行數。

例:

select /*+ cardinality ( [tablespec] card ) */

selectivity

此hint定義了對查詢或查詢部分選擇性的評價。如果只定義了乙個**,選擇性是在所定義**裡滿足所有單一**判斷的行部分。如果定義了一系列**,選擇性是指在合併以任何順序滿足所有可用判斷的全部**後,所得結果中的行部分。

例:

select /*+ selectivity ( [tablespec] sel ) */

然而,注意如果hints cardinality 和 selectivity都定義在同樣的一批**,二者都會被忽略。

no_use_nl

hint no_use_nl使cbo執行迴圈巢狀,通過把指定**作為內部**,把每個指定**連線到另一原始行。通過這一hint,只有hash join和sort-merge joins會為指定**所考慮。

例:

select /*+ no_use_nl ( employees ) */ ...

no_use_merge

此hint使cbo通過把指定**作為內部**的方式,拒絕sort-merge把每個指定**加入到另一原始行。

例:

select /*+ no_use_merge ( employees dept ) */ ...

no_use_hash

此hint使cbo通過把指定**作為內部**的方式,拒絕hash joins把每個指定**加入到另一原始行。

例:

select /*+ no_use_hash ( employees dept ) */ ...

no_index_ffs

此hint使cbo拒絕對指定**的指定標籤進行fast full-index scan。

syntax: /*+ no_index_ffs ( tablespecindexspec ) */

隨著oracle優化器日趨成熟,oracle必定會不斷增加自己對調整sql語句的工具儲 備。當然,討論所有複雜的oracle10g sql新hints遠遠超出了本文的範圍,讀者可以從mike ault的新書oracle database 10g new features中獲得關於oracle10g的更多資訊。

Oracle的hints調整機制介紹

oracle使用的hints調整機制一直很複雜,oracle technical network對使用hints調整oracle sql的過程有很好的全面評述。根據對10g資料庫的介紹,可使用更多新的optimizer hints來控制優化行為。現在讓我們迅速了解一下這些強大的新hints spre...

oracle調優筆記

在sqlplus中輸入 desc v libraycache v sgastat v sql v sqlarea v sqltext v db object cache select from v librarycache col namespace format a10 設定格式長度 查詢執行次數...

Oracle調優參考

一 查oracle引數並進行調整1 檢視oracle的init.ora檔案 引數一 db block buffers 引數二 shared pool size 引數三 process 500 引數四 distributed stransactions 200 引數五 sort area size 1...