histogram一點研究(待整理)
一 基於值的histogram
1
corp表sp_id列的distinct key為22
SQL> select count(distinct sp_id) from corp;
COUNT(DISTINCTSP_ID)
--------------------
22
一 基於值的histogram
1
corp表sp_id列的distinct key為22
SQL> select count(distinct sp_id) from corp;
COUNT(DISTINCTSP_ID)
--------------------
22
2 使用以下語句產生柱狀圖資料.預設會產生75個buckets來表示資料分佈
SQL> analyze table corp compute statistics for columns sp_id;
Table analyzed.
3 當histogram buckets>=表的distinct key時,那麼Oracle會使用基於值的histogram,每個值將會佔據一個bucket
SQL> select ENDPOINT_NUMBER,ENDPOINT_VALUE,ENDPOINT_ACTUAL_VALUE from user_histograms
2 where TABLE_NAME='CORP'
3 and COLUMN_NAME='SP_ID';
基於值的Histogram,
ENDPOINT_VALUE表示表CORP SP_ID列的值
ENDPOINT_NUMBER表示該值的分佈
ENDPOINT_NUMBER ENDPOINT_VALUE ENDPOINT_ACTUAL_VALUE
--------------- -------------- ------------------------------
242 6
369 9
384 11
413 13
431 14
447 15
489 16
500 17
513 18
514 19
518 20
ENDPOINT_NUMBER ENDPOINT_VALUE ENDPOINT_ACTUAL_VALUE
--------------- -------------- ------------------------------
523 21
532 22
535 23
537 24
546 25
549 26
556 27
559 28
563 29
566 30
586 31
22 rows selected.
這裡我們也可以透過以下查詢得到sp_id=6時的紀錄條數
SQL> select count(*) from corp where sp_id=6;
COUNT(*)
----------
242
369-242=127
SQL> select count(*) from corp where sp_id=9;
COUNT(*)
----------
127
二 基於高度的histogram
1
for columns sp_id size 10表示十個Buckets表示資料分佈
SQL> analyze table corp compute statistics for columns sp_id size 10;
Table analyzed.
SQL> SELECT column_name, num_distinct, num_buckets
2 FROM USER_TAB_COL_STATISTICS
3 WHERE table_name = 'CORP' and column_name ='SP_ID';
COLUMN_NAME NUM_DISTINCT NUM_BUCKETS
------------------------------ ------------ -----------
SP_ID 22 5
當histogram buckets的數量(10)少於列的distinct(22) value時,oracle會採用基於高度的直方圖反映資料分佈,每個bucket容納相同數量的值。
表corp共586條資料,第0-8個Buckets每個Bucket儲存58條紀錄,第9個儲存64條紀錄
SQL> select count(*) from corp;
COUNT(*)
----------
586
SQL> select 586/10 from dual;
586/10
----------
58.6
前4個(1,2,3,4)buckets儲存sp_id=6的紀錄
4*58=232
所以sp_id=6的紀錄大約在232左右
SQL> select ENDPOINT_NUMBER,ENDPOINT_VALUE,ENDPOINT_ACTUAL_VALUE from user_histograms
2 where TABLE_NAME='CORP'
3 and COLUMN_NAME='SP_ID';
ENDPOINT_NUMBER ENDPOINT_VALUE ENDPOINT_ACTUAL_VALUE
--------------- -------------- ------------------------------
4 6
6 9
7 13
8 16
9 22
10 31
6 rows selected.
實際查詢為242
SQL> select count(*) from corp where sp_id=6;
COUNT(*)
----------
242
6-4=2個(4,5)Buckets儲存sp_id=9的紀錄
2*58=116 實際127條紀錄
SQL> select count(*) from corp where sp_id=9;
COUNT(*)
----------
127
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/76065/viewspace-822222/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 待整理
- 待整理 mybatisMyBatis
- Flutter筆記整理[待拆分]Flutter筆記
- LDA臨時筆記,待整理LDA筆記
- 待機、休眠、睡眠的區別(整理)
- k8s待研究項K8S
- 前端學習整理資料(未完待續)前端
- oracle直方圖histogram小記(一)Oracle直方圖Histogram
- Swift AST的一點研究SwiftAST
- VirtualBox CentOS7網路配置(待整理)CentOS
- s3-api閱讀筆記(待整理)S3API筆記
- Histogram總結Histogram
- about histogram(2)Histogram
- about histogram(1)Histogram
- [每天進步一點點]mysql筆記整理(三):索引MySql筆記索引
- HTML DOM 知識點整理(一)—— Document物件HTML物件
- [PT]Column Histogram StatisticsHistogram
- Linux 安裝 MySQL 8 的錯誤整理(待續)LinuxMySql
- 許可權系統reademe.md文件---待整理
- Oracle 高水位線的一點研究Oracle
- RMAN : set newname for命令的一點研究
- spring boot 註解物件的問題 待研究Spring Boot物件
- [每天進步一點點]mysql筆記整理(二):事務與鎖MySql筆記
- java技術點整理Java
- JavaScript知識點整理JavaScript
- php面試考點整理PHP面試
- CSS知識點整理CSS
- CANFD知識點整理
- MQTT知識點整理MQQT
- histogram與10053(zt)Histogram
- Histogram Investigation(轉自kamus)Histogram
- 談談如何像對待產品一樣對待資料
- NSSCTF—Crypyo "第一頁" ԅ(≖‿≖ԅ) (待續……)
- 研究網路卡地址註冊時的一點思考
- mysql--平日點滴知識隨筆(待續)MySql
- Flow 常用知識點整理
- Java 核心知識點整理Java
- 原生JS知識點整理JS