[zt] Histograms - 直方圖
什麼時候需要使用Histograms?如果表格內有20個column,其中最常被使用在查詢的條件句內的只有一個column A,另外有個column B很少被拿來做查詢條件使用。現在你發現欄位A和欄位B的儲存資料非常的skewed,就是假設儲存的一百萬筆rows,有99%的值相等,只有1%的值是零散的,這就叫做歪斜的儲存值。
瞭解了skewed後,回到問題就是兩個欄位A、B儲存的值都是非常不平均,這時候optimizer很難準確的評估一個query statement所產生執行計劃的最佳選擇性。所以我們可以利用Histograms來幫助optimizer選擇最適當的選擇計劃。他的意義簡單的說就是假設有一袋米,裡面有成千上萬個壽司米,和混雜1%的在來米、中興米、糯米等,當我查詢為select * from米袋where品種=壽司米,應該採用full table scan或者使用建立在品種欄位上的索引?這個範例顯然使用FTS是比較有效率的,但為了幫助optimizer瞭解,我們拿了75個籃子,我們把所有的米平均且依照品種依序放在75個籃子內,你可以很輕易看出除了幾籃的在來米、中興米之外,絕大部分裝的都是壽司米,這就是建立histograms的目的。
回到一開始的問題,欄位A和B都是highly-skewed data,唯一差別是我們很少利用欄位B在做查詢條件句,那需要只對欄位A建立histograms或者兩者皆要,又或者表格內所有的欄位都應該需要建立,才能更加提升效能呢?
當該欄位資料並沒有發生skewed狀況時
當該欄位很少用來做查詢where條件時
我們不需要在該欄位建立histograms,就算建了也不會對performance有所提升。
DBMS_STATS.GATHER_TABLE_STATS (NULL,'EMP', method_opt =>'FOR COLUMNS sal SIZE 100');size指的是buckets數量,白話的就是建幾個籃子來裝,越多當然相對的平均,不過要看你資料特性來決定不是越大越好,可以嘗試的調整來找出最佳的值,預設值是75
在正常的資料分佈而是沒有資料的某種分佈偏差的情況下,如果收集histograms統計資訊,在cursor_sharing這個引數設定為similar的時候容易出現cursor的子版本過多的問題。所以在使用histograms的時候需要注意這個問題。
之所以產生這樣的原因是這樣的:在使用收集histogram統計資料之後,如果使用使用繫結變數,histogram資料將不會被使用。在我們設定引數cursor_sharing有三種選擇:如果是force的時候,這時候,Oracle會將文的變數無論三七二十一就變成需要的繫結變數的形式,這樣我們採集的histogram資料將不會被使用。也就達不到我們所需要的最佳化效果了。如果設定為exact的時候,就會被不使用繫結變數,如果自己本身沒有繫結變數的時候,如果設定為similar的時候,每一次最佳化器會根據histogram統計資料解析SQL,以達到最優的結果。但是如果這個資料的分佈並不是有分佈不均得現象,就不要使用histogram統計資料,這或許是為什麼在Oracle的文件中說:
Do not use histograms unless they substantially improve performance.
的其中一個原因之一了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-442655/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- search(13)- elastic4s-histograms:聚合直方圖ASTHistogram直方圖
- oracle 柱狀圖(Histograms)OracleHistogram
- 直方圖均衡化直方圖
- 直方圖學習直方圖
- python如何畫直方圖Python直方圖
- halcon-直方圖均衡直方圖
- 直方圖中最大矩形直方圖
- [Python影象處理] 十一.灰度直方圖概念及OpenCV繪製直方圖Python直方圖OpenCV
- OpenCV計算機視覺學習(9)——影像直方圖 & 直方圖均衡化OpenCV計算機視覺直方圖
- elasticsearch 之 histogram 直方圖聚合ElasticsearchHistogram直方圖
- Matplotlib直方圖繪製技巧直方圖
- 聊一聊MySQL的直方圖MySql直方圖
- [20221227]Adaptive Cursor Sharing & 直方圖.txtAPT直方圖
- 淺析MySQL 8.0直方圖原理MySql直方圖
- 一文搞懂直方圖均衡直方圖
- opencv——影像直方圖與反向投影OpenCV直方圖
- 【沃趣科技】直方圖系列1直方圖
- 你知道直方圖都能幹啥?直方圖
- OpenCV之影象直方圖均衡化OpenCV直方圖
- 柱狀圖、直方圖、散點圖、餅圖講解直方圖
- 深度學習(模型引數直方圖)深度學習模型直方圖
- 直方圖均衡化原理與實現直方圖
- 一文搞懂 Prometheus 的直方圖Prometheus直方圖
- 灰度直方圖均衡化及其實現直方圖
- matplotlib的直方圖繪製(筆記)直方圖筆記
- Python 影像處理 OpenCV (16):影像直方圖PythonOpenCV直方圖
- [20190630]如何確定直方圖型別.txt直方圖型別
- 【R語言】繪製權重直方圖R語言直方圖
- Python繪製直方圖 Pygal模擬擲骰子Python直方圖
- leetcode:求直方圖構成的矩形最大面積LeetCode直方圖
- 影像演算法之直方圖均衡化(灰度影像)演算法直方圖
- 【cbo計算公式】Frequenccy 直方圖選擇率(三)公式直方圖
- 【16位RAW影像處理三】直方圖均衡化及區域性直方圖均衡用於16點陣圖像的細節增強。直方圖
- Python批次繪製遙感影像資料的直方圖Python直方圖
- 5種方法教你用Python玩轉histogram直方圖PythonHistogram直方圖
- python資料視覺化-matplotlib入門(4)-條形圖和直方圖Python視覺化直方圖
- webrtc QOS筆記一 Neteq直方圖演算法淺讀Web筆記直方圖演算法
- 【影像處理】基於OpenCV實現影像直方圖的原理OpenCV直方圖
- 數字影像處理讀書筆記(三)直方圖匹配筆記直方圖