1. 程式人生 > 資料庫 >Oracle中直方圖對執行計劃的影響詳解

Oracle中直方圖對執行計劃的影響詳解

前言

大家應該都知道,在Oracle資料庫中,CBO會預設目標列的資料在其最小值low_value和最大值high_value之間均勻分佈,並按照均勻分佈原則,來計算目標列

施加查詢條件後的可選擇率以及結果集的cardinality.

如果對目標收集了直方圖,則意味著CBO不再認為目標列上的資料是均勻分佈的。CBO會用該列上的直方圖的統計資訊計算返回結果集的cardinality.

驗證直方圖對執行計劃的影響步驟:

1、建立一張表T1

2、往表中插入傾斜度很高的資料

3、在B欄位上建立索引

4、刪除表中直方圖資訊

5、檢視直方圖資訊

HISTOGRAM:NONE 代表沒有直方圖資訊

6、查詢b=2的執行計劃

從執行計劃可以看出:查詢走的是全表掃描,因為表T1中的資料被視為了均勻分佈,CBO認為走

全表比走索引會更快

7、收集直方圖資訊

8、查詢直方圖資訊

HISTOGRAM:FREQUENCY 頻率直方圖

可以看出此時表中已經有直方圖資訊

9、再次檢視b=2的執行計劃

這個時候可以看出,執行計劃走了索引,結果正確!

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對我們的支援。