[轉] oracle統計資訊(statistics)和直方圖(histogram)
以前一直對統計資訊的理解就是對行的資料分佈的,提供改CBO來選擇高效的執行計劃。這段時間看了不少資料,對統計有了一個更清晰的認識
統計資訊:
1,表中的統計資訊
2,索引列的統計資訊
3,一般列的統計資訊
表的統計資訊:1,錶行數,使用的塊數,空的塊數,塊的使用率,行遷移和連結的數量,pctfree,pctused的資料,行的平均大小
Code highlighting produced by Actipro CodeHighlighter (freeware)
-->select NUM_ROWS, --表中的記錄數
BLOCKS, --表中資料所佔的資料塊數
EMPTY_BLOCKS, --表中的空塊數
AVG_SPACE, --資料塊中平均的使用空間
CHAIN_CNT, --表中行連線和行遷移的數量
AVG_ROW_LEN --每條記錄的平均長度
from user_tables
索引列的統計資訊 1,索引的深度(B-Tree的級別),索引葉級的塊數量,叢集因子(clustering_factor), 唯一值的個數
Code highlighting produced by Actipro CodeHighlighter (freeware)
-->select BLEVEL, --索引的層數
LEAF_BLOCKS, --葉子結點的個數
DISTINCT_KEYS, --唯一值的個數
AVG_LEAF_BLOCKS_PER_KEY, --每個KEY的平均葉塊個數
AVG_DATA_BLOCKS_PER_KEY, --每個KEY的平均資料塊個數
CLUSTERING_FACTOR --群集因子
from user_indexes
列的統計資訊 1,唯一的值個數,列最大小值,密度(選擇率),資料分佈(直方圖資訊),NUll值個數
Code highlighting produced by Actipro CodeHighlighter (freeware)
-->select NUM_DISTINCT, --唯一值的個數
LOW_VALUE, --列上的最小值
HIGH_VALUE, --列上的最大值
DENSITY, --選擇率因子(密度)
NUM_NULLS, --空值的個數
NUM_BUCKETS, --直方圖的BUCKET個數
HISTOGRAM --直方圖的型別
from user_tab_columns
直方圖:是統計資訊一種,對資料分佈的統計,目的是為了更精確的得到選擇率和基數,CBO才能估計出最優的執行計劃。
上一篇我們知道了統計資訊在:表,列,索引上能夠獲取的統計資訊,但如果有一個sql:
select * from table where x=1;(在x列上有索引)
那Oracle如何選擇是表掃描,索引查詢資料,透過對列列的統計資訊,但沒有直方圖,CBO最佳化器不知道x=1的資料有多少?無法提供資料參考。有兩鍾情況:
table表中:1,x=1的資料比如就一條 CBO最佳化器:應該索引查詢
2,x=1的資料有很多條,CBO最佳化器:這時應該表掃描
如果索引列沒有直方圖,索引上有最大,最小值,總行數,那就不能知道x=1在表中大概有多少行。如果只是有索引上統計資訊,就無法獲取大概的資料分佈
CBO也就得不到正確的結果。
對於資料分佈均勻的列,直方圖沒意義,對應列中資料分佈比較傾斜的列(不均勻),直方圖就非常有用。CBO就可以估計大概的資料分佈,計算查詢的選擇率和基數也更精確。
所以直方圖有兩種:1,高度均衡直方圖 2,頻率直方圖
高度均衡直方圖: 資料分佈不均勻 ,由於列中資料很多,這時資料比較密集,不利於分析和評估,這時直方圖需要均衡化。
頻率直方圖:就是資料分佈很均勻,
得到的直方圖:資訊的準確性就由兩個數值決定,一個是bucket的個數,一個NUM_DISTINCT的個數。
一般來說,bucket的資料越多,關於列資料分佈的資訊就越正確,但統計直方圖的花費的時間和資源就多,oracle中bucket的最大254個,預設是75個。而SQL Server預設是200個。
在oracle中要刪除直方圖資訊就是設定bucket的資料為1,如下:
Analyze table 表 compute statistics for table for columns id size 1;
exec dbms_stats.gather_table_stats('使用者', '表',cascade=>false, method_opt=>'for columns 列 size 1');
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-608324/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- elasticsearch 之 histogram 直方圖聚合ElasticsearchHistogram直方圖
- 5種方法教你用Python玩轉histogram直方圖PythonHistogram直方圖
- Oracle資料遷移後由列的直方圖統計資訊引起的執行計劃異常Oracle直方圖
- Oracle多列統計資訊與直方圖對有關聯多列查詢影響Oracle直方圖
- HC(Histogram-based Contrast) 基於直方圖對比度的顯著性HistogramAST直方圖
- 微課sql最佳化(7)、統計資訊收集(5)-關於直方圖SQL直方圖
- 【統計資訊】Oracle統計資訊Oracle
- OpenCV計算機視覺學習(9)——影像直方圖 & 直方圖均衡化OpenCV計算機視覺直方圖
- ORACLE表統計資訊與列統計資訊、索引統計資訊Oracle索引
- Oracle統計資訊的收集和維護Oracle
- Oracle收集統計資訊Oracle
- Javafx-【直方圖】文字頻次統計工具 中文/英文單詞統計Java直方圖
- 【統計資訊】Oracle常用的收集統計資訊方式Oracle
- 直方圖學習直方圖
- 直方圖均衡化直方圖
- Oracle 統計資訊介紹Oracle
- 修改oracle 的統計資訊Oracle
- python資料視覺化-matplotlib入門(4)-條形圖和直方圖Python視覺化直方圖
- halcon-直方圖均衡直方圖
- 直方圖中最大矩形直方圖
- python如何畫直方圖Python直方圖
- [Python影象處理] 十一.灰度直方圖概念及OpenCV繪製直方圖Python直方圖OpenCV
- 【TUNE_ORACLE】列出必須建立直方圖的列SQL參考Oracle直方圖SQL
- oracle 統計資訊檢視與收集Oracle
- 【STATS】Oracle遷移表統計資訊Oracle
- 【SCRIPT】Oracle統計資訊相關SQLOracleSQL
- 【cbo計算公式】Frequenccy 直方圖選擇率(三)公式直方圖
- Matplotlib直方圖繪製技巧直方圖
- [統計資訊系列7] Oracle 11g的自動統計資訊收集Oracle
- 【統計資訊】如何備份和還原統計資訊
- 【ASK_ORACLE】Oracle如何恢復舊的統計資訊Oracle
- 直觀易用的介面設計:IBM SPSS Statistics讓資料分析更輕鬆IBMSPSS
- Oracle運維指令碼-收集統計資訊Oracle運維指令碼
- Oracle 統計資訊相關命令彙總Oracle
- SciTech-Statistics-英語授課:Business Statistics商務統計
- 淺析MySQL 8.0直方圖原理MySql直方圖
- 【沃趣科技】直方圖系列1直方圖
- OpenCV之影象直方圖均衡化OpenCV直方圖
- 你知道直方圖都能幹啥?直方圖