前言
大家應(yīng)該都知道,在Oracle數(shù)據(jù)庫中,CBO會(huì)默認(rèn)目標(biāo)列的數(shù)據(jù)在其最小值low_value和最大值high_value之間均勻分布,并按照均勻分布原則,來計(jì)算目標(biāo)列
施加查詢條件后的可選擇率以及結(jié)果集的cardinality.
如果對目標(biāo)收集了直方圖,則意味著CBO不再認(rèn)為目標(biāo)列上的數(shù)據(jù)是均勻分布的。CBO會(huì)用該列上的直方圖的統(tǒng)計(jì)信息計(jì)算返回結(jié)果集的cardinality.
驗(yàn)證直方圖對執(zhí)行計(jì)劃的影響步驟:
1、創(chuàng)建一張表T1
![](/d/20211018/bdb94409fa4c9f0da4cf20994057cc87.gif)
2、往表中插入傾斜度很高的數(shù)據(jù)
![](/d/20211018/984ce5f45aa51c0c09897d1d020edb3a.gif)
![](/d/20211018/e824e7301436d3666ab532b70405c421.gif)
![](/d/20211018/3345e801fc9647c3b5b09f38b3506124.gif)
3、在B字段上創(chuàng)建索引
![](/d/20211018/b800cceadf74793feb08371175837df3.gif)
4、刪除表中直方圖信息
![](/d/20211018/14948ccb0df2b9def73757d2ab560f31.gif)
5、查看直方圖信息
![](/d/20211018/d108674ba2d6394207d1a940737b8451.gif)
HISTOGRAM:NONE
代表沒有直方圖信息
6、查詢b=2的執(zhí)行計(jì)劃
![](/d/20211018/38ec1a2cd1fdb9c6843276e9fe9dc3d6.gif)
![](/d/20211018/7feb97a855cd9fe9f5ed073b999db2bb.gif)
從執(zhí)行計(jì)劃可以看出:查詢走的是全表掃描,因?yàn)楸鞹1中的數(shù)據(jù)被視為了均勻分布,CBO認(rèn)為走
全表比走索引會(huì)更快
7、收集直方圖信息
![](/d/20211018/779b4ffda156faa7e0e847f004e90e34.gif)
8、查詢直方圖信息
![](/d/20211018/b8f742d88bacfd8beeaafe657cec40f3.gif)
![](/d/20211018/bb6beb0781322a8690fb46b32ec864b6.gif)
HISTOGRAM:FREQUENCY
頻率直方圖
可以看出此時(shí)表中已經(jīng)有直方圖信息
9、再次查看b=2的執(zhí)行計(jì)劃
![](/d/20211018/d1059fb618210667e6b878dab8ea09c2.gif)
![](/d/20211018/190a49e6a0072cb5896dc754c1f79449.gif)
這個(gè)時(shí)候可以看出,執(zhí)行計(jì)劃走了索引,結(jié)果正確!
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
您可能感興趣的文章:- ORACLE數(shù)據(jù)庫查看執(zhí)行計(jì)劃的方法
- Oracle中獲取執(zhí)行計(jì)劃的幾種方法分析
- Oracle中使用DBMS_XPLAN處理執(zhí)行計(jì)劃詳解
- 查看Oracle的執(zhí)行計(jì)劃一句話命令
- Oracle中基于hint的3種執(zhí)行計(jì)劃控制方法詳細(xì)介紹