Oracle中直方圖對執(zhí)行計(jì)劃的影響詳解
前言
大家應(yīng)該都知道,在Oracle數(shù)據(jù)庫中,CBO會默認(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會用該列上的直方圖的統(tǒng)計(jì)信息計(jì)算返回結(jié)果集的cardinality.
驗(yàn)證直方圖對執(zhí)行計(jì)劃的影響步驟:
1、創(chuàng)建一張表T1

2、往表中插入傾斜度很高的數(shù)據(jù)



3、在B字段上創(chuàng)建索引

4、刪除表中直方圖信息

5、查看直方圖信息

HISTOGRAM:NONE 代表沒有直方圖信息
6、查詢b=2的執(zhí)行計(jì)劃


從執(zhí)行計(jì)劃可以看出:查詢走的是全表掃描,因?yàn)楸鞹1中的數(shù)據(jù)被視為了均勻分布,CBO認(rèn)為走
全表比走索引會更快
7、收集直方圖信息

8、查詢直方圖信息


HISTOGRAM:FREQUENCY 頻率直方圖
可以看出此時表中已經(jīng)有直方圖信息
9、再次查看b=2的執(zhí)行計(jì)劃


這個時候可以看出,執(zhí)行計(jì)劃走了索引,結(jié)果正確!
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
oracle 11g中exp無法導(dǎo)出空表問題的快速解決方法
在一些生產(chǎn)系統(tǒng)中,有些時候我們?yōu)榱诉M(jìn)行oracle數(shù)據(jù)庫部分?jǐn)?shù)據(jù)的備份和遷移,會使用exp進(jìn)行數(shù)據(jù)的導(dǎo)出,但在實(shí)際導(dǎo)出的時候,我們發(fā)現(xiàn)導(dǎo)出的時候,發(fā)現(xiàn)很多空表未進(jìn)行導(dǎo)出,今天我們給出一個快速解決該問題的辦法,需要的朋友可以參考下2024-12-12
登錄oracle數(shù)據(jù)庫時密碼忘記的解決方法
登錄本地oracle數(shù)據(jù)庫時,忘記密碼了,這種情況時有發(fā)生,下面有個不錯的解決方法,希望對大家有所幫助2014-01-01
windows中oracle存儲過程加密的實(shí)例代碼
這篇文章主要介紹了windows中oracle存儲過程加密的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
Oracle使用RMAN進(jìn)行數(shù)據(jù)庫恢復(fù)的實(shí)現(xiàn)步驟
使用 RMAN(Recovery Manager)恢復(fù) Oracle 數(shù)據(jù)庫是確保數(shù)據(jù)在災(zāi)難情況下能夠得到恢復(fù)的關(guān)鍵步驟,以下是詳細(xì)的指導(dǎo)和代碼示例,展示如何使用 RMAN 進(jìn)行數(shù)據(jù)庫恢復(fù),需要的朋友可以參考下2024-09-09
將mysql轉(zhuǎn)換到oracle必須了解的50件事
我其實(shí)是同一天看到Robert Treat幾人整理的”Mysql 遷移到Oracle前需要了解的50件事“與Baron Schwartz的”O(jiān)racle遷移到Mysql之前需要了解的50件事“的,只是Baron Schwartz的這個列表可能對大家更加有用處,也就先將其整出來了.2010-06-06

