前言
大家應該都知道,在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的執行計劃


這個時候可以看出,執行計劃走了索引,結果正確!
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
您可能感興趣的文章:- ORACLE數據庫查看執行計劃的方法
- Oracle中獲取執行計劃的幾種方法分析
- Oracle中使用DBMS_XPLAN處理執行計劃詳解
- 查看Oracle的執行計劃一句話命令
- Oracle中基于hint的3種執行計劃控制方法詳細介紹