Oracle的hints調整機制介紹

2021-04-13 05:12:01 字數 3546 閱讀 2433

oracle使用的hints調整機制一直很複雜,oracle technical network對使用hints調整oracle sql的過程有很好的全面評述。根據對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 ) */

no_index_ss

此hint使cbo拒絕對指定**的指定標籤進行skip scan。

syntax: /*+ no_index_ss (tablespecindexspec ) */

no_star_transformation

此hint使cbo忽略star 詢問資訊。

syntax: /*+ no_star_transformation */

index_ss

此hint明確地為指定**選擇index skip scan。如果語句使用index range scan,oracle將以對其索引值的公升序排列來檢查索引入口。在被分割的索引中,其結果為對每個部分內部的公升序排列。

syntax: /*+ index_ss (tablespecindexspec) */

index_ss_asc

此hint明確地為指定**選擇index skip scan。如果語句使用index range scan,oracle將以對其索引值的公升序排列來檢查索引入口。在被分割的索引中,其結果為對每個部分內部的公升序排列。

syntax: /*+ index_ss_asc (tablespecindexspec) */

index_ss_desc

此hint明確為指定**選擇index skip scan。如果語句使用index range scan,oracle將以對其索引值的降序排列來檢查索引入口。在被分割的索引中,其結果為對每個部分內部的降序排列。

syntax: /*+ index_ss_desc (tablespecindexspec) */

cpu_costing

此hint為sql語句開啟cpu costing。這是對優化器的預設評估模式。優化器評估當執行給定查詢時,資料庫需要執行的io運算元、io操作種類、以及cpu週期數。

syntax: /*+ cpu_costing (tablespecindexspec) */

no_cpu_costing

此hint為sql語句關閉cpu costing。然後cbo使用io cost模式,此模式忽略cpu花費,僅測量在single-block reads中的所有指標。

syntax: /*+ no_cpu_costing */

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

Oracle使用的hints調整機制

10g資料庫介紹 可以使用更多新的optimizer hints來控制優化行為。現在讓我們快速解析一下這些強大的新hints spread min analysis 使用這一hint,你可以忽略一些關於如詳細的關係依賴圖分析等電子 的編譯時間優化規則。其他的一些優化,如建立過濾以有選擇性的定位電子 ...

Android螢幕背光調整機制

擴充套件乙個硬體 比如led 藍芽 感測器等 至少需要硬體 驅動 驅動互動模組。至於系統的層面如何把系統庫加入自己的體系裡面去,就是作業系統自己的事了。這裡分析一下以背光調整為例android。原始碼在這裡 要調整背光,第一步是搜尋並載入驅動互動模組 乙個.so庫 然後開啟裝置。看一下這個函式 vi...

Oracle效能調整的誤區

共享伺服器模式 mts 集群技術 clustering rac 分割槽並行處理 主要是並行查詢 oracle提供的這些特性確實是用來進行效能改善的,但我們往往忽略了對自身應用特性的分析,它們是否適合於我們.最近,通過對這方面知識的深入了解,發現我們以前存在一些錯誤的認識.我覺得有必要,大家一起來改變...