微课sql优化(7)、统计信息收集(5)-关于直方图
发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,1、直方图介绍你可以为列统计直方图。这些直方图为列数据的分布情况提供准确的估算。当列数据倾斜时,直方图提供更为优化的选择性估算,为数据分布不均匀的情况提供最优的执行计划。 Oracle Databas
千家信息网最后更新 2025年11月11日微课sql优化(7)、统计信息收集(5)-关于直方图
你可以为列统计直方图。这些直方图为列数据的分布情况提供准确的估算。当列数据倾斜时,直方图提供更为优化的选择性估算,为数据分布不均匀的情况提供最优的执行计划。 Oracle Database为提供2种类别的列统计信息直方图:
每个桶中的行数为总行数的10%。在这个均匀分布的例子中,40%的行的值在60到100之间。 如果数据不均匀分布,则直方图可能如图13-2所示。在这种情况下,大多数行的列的值为5。只有10%的行的值在60到100之间。 图13-2具有非均匀分布的高度平衡直方图 您可以使用USER_TAB_HISTOGRAMS表格查看高度平衡的直方图,如示例13-1所示。
在 frequency histogram中,列的每个值对应于直方图的单个桶。每个桶包含此单个值的出现次数。例如,假设36行包含列的值1 warehouse_id。端点值1具有端点号36。 数据库在以下条件下自动创建频率直方图,而不是高度平衡的直方图:
统计已销户用户数量,请优化以下语句 select count(1) from ht.c_cons where status='close';
1、直方图介绍
你可以为列统计直方图。这些直方图为列数据的分布情况提供准确的估算。当列数据倾斜时,直方图提供更为优化的选择性估算,为数据分布不均匀的情况提供最优的执行计划。 Oracle Database为提供2种类别的列统计信息直方图:
- Height-Balanced Histograms
- Frequency Histograms
每个桶中的行数为总行数的10%。在这个均匀分布的例子中,40%的行的值在60到100之间。 如果数据不均匀分布,则直方图可能如图13-2所示。在这种情况下,大多数行的列的值为5。只有10%的行的值在60到100之间。 图13-2具有非均匀分布的高度平衡直方图 您可以使用USER_TAB_HISTOGRAMS表格查看高度平衡的直方图,如示例13-1所示。- BEGIN
- DBMS_STATS . GATHER_table_STATS (
- OWNNAME = > 'OE' ,
- TABNAME = > 'INVENTORIES' ,
- METHOD_OPT = > 'FOR COLUMNS SIZE 10 quantity_on_hand' ) ;
- END ;
- /
- SELECT COLUMN_NAME , NUM_DISTINCT , NUM_BUCKETS , HISTOGRAM
- FROM USER_TAB_COL_STATISTICS
- WHERE TABLE_NAME = 'INVENTORIES' AND COLUMN_NAME = 'QUANTITY_ON_HAND' ;
- COLUMN_NAME NUM_DISTINCT NUM_BUCKETS HISTOGRAM
- ------------------------------ ------------ ----------- ---------------
- QUANTITY_ON_HAND 237 10 HEIGHT BALANCED
- SELECT ENDPOINT_NUMBER , ENDPOINT_VALUE
- FROM USER_TAB_HISTOGRAMS
- WHERE TABLE_NAME = 'INVENTORIES' AND COLUMN_NAME = 'QUANTITY_ON_HAND'
- ORDER BY ENDPOINT_NUMBER ;
- ENDPOINT_NUMBER ENDPOINT_VALUE
- --------------- --------------
- 0 0
- 1 27
- 2 42
- 3 57
- 4 74
- 5 98
- 6 123
- 7 149
- 8 175
- 9 202
- 10 353
3、 frequency histogra m
在 frequency histogram中,列的每个值对应于直方图的单个桶。每个桶包含此单个值的出现次数。例如,假设36行包含列的值1 warehouse_id。端点值1具有端点号36。 数据库在以下条件下自动创建频率直方图,而不是高度平衡的直方图:
- 不同值的数量小于或等于指定的直方图桶数(最多254个)。
- 每个列值重复一次。
- BEGIN
- DBMS_STATS . GATHER_TABLE_STATS (
- OWNNAME = > 'OE' ,
- TABNAME = > 'INVENTORIES' ,
- METHOD_OPT = > 'FOR COLUMNS SIZE 20 warehouse_id' ) ;
- END ;
- /
- SELECT COLUMN_NAME , NUM_DISTINCT , NUM_BUCKETS , HISTOGRAM
- FROM USER_TAB_COL_STATISTICS
- WHERE TABLE_NAME = 'INVENTORIES' AND COLUMN_NAME = 'WAREHOUSE_ID' ;
- COLUMN_NAME NUM_DISTINCT NUM_BUCKETS HISTOGRAM
- ------------------------------ ------------ ----------- ---------------
- WAREHOUSE_ID 9 9 FREQUENCY
- SELECT ENDPOINT_NUMBER , ENDPOINT_VALUE
- FROM USER_TAB_HISTOGRAMS
- WHERE TABLE_NAME = 'INVENTORIES' AND COLUMN_NAME = 'WAREHOUSE_ID'
- ORDER BY ENDPOINT_NUMBER ;
- ENDPOINT_NUMBER ENDPOINT_VALUE
- --------------- --------------
- 36 1
- 213 2
- 261 3
- 370 4
- 484 5
- 692 6
- 798 7
- 984 8
- 1112 9
5、 练习4 、直方图优化练习
统计已销户用户数量,请优化以下语句 select count(1) from ht.c_cons where status='close';
- SQL > select status , count ( 1 ) from ht . c_cons group by status ;
- STATUS COUNT ( 1 )
- ------------------------------------------------------------ ----------
- close 19
- open 9519
- creating 462
- SQL > create index ht . idx_c_cons_status on ht . c_cons ( status ) ;
- SQL > col owner for a10
- col table_name for a20
- col column_name for a20
- col data_type for a30
- col histogram for a20
- select owner , table_name , column_name , data_type ,
- column_id , num_distinct , histogram , NUM_NULLS , LAST_ANALYZED from
- dba_tab_columns where table_name = 'C_CONS' and owner = 'HT'
- order by column_id ; SQL > SQL > SQL > SQL > SQL > 2 3 4
- OWNER TABLE_NAME COLUMN_NAME DATA_TYPE COLUMN_ID NUM_DISTINCT HISTOGRAM NUM_NULLS LAST_ANALYZED
- ---------- -------------------- -------------------- ------------------------------ ---------- ------------ -------------------- ---------- ------------------------------
- HT C_CONS CONS_NO NUMBER 1 10000 NONE 0 20 - AUG - 17
- HT C_CONS CONS_NAME VARCHAR2 2 5057 NONE 0 20 - AUG - 17
- HT C_CONS ORG_NAME VARCHAR2 3 12 NONE 0 20 - AUG - 17
- HT C_CONS BUILD_DATE DATE 4 10000 NONE 0 20 - AUG - 17
- HT C_CONS STATUS VARCHAR2 5 3 NONE 0 20 - AUG - 17
- SQL > exec DBMS_STATS . GATHER_TABLE_STATS ( ownname = > 'HT' , tabname = > 'C_CONS' , estimate_percent = > 30 , method_opt = > 'for columns size 50 status' , no_invalidate = > FALSE , degree = > 4 , cascade = > TRUE ) ;
- PL / SQL procedure successfully completed .
- SQL > col owner for a10
- SQL > col table_name for a20
- col column_name for a20
- col data_type for a30
- col histogram for a20
- select owner , table_name , column_name , data_type ,
- column_id , num_distinct , histogram , NUM_NULLS , LAST_ANALYZED from
- dba_tab_columns where table_name = 'C_CONS' and owner = 'HT'
- order by column_id ; SQL > SQL > SQL > SQL > 2 3 4
- OWNER TABLE_NAME COLUMN_NAME DATA_TYPE COLUMN_ID NUM_DISTINCT HISTOGRAM NUM_NULLS LAST_ANALYZED
- ---------- -------------------- -------------------- ------------------------------ ---------- ------------ -------------------- ---------- ------------------------------
- HT C_CONS CONS_NO NUMBER 1 10000 NONE 0 20 - AUG - 17
- HT C_CONS CONS_NAME VARCHAR2 2 5057 NONE 0 20 - AUG - 17
- HT C_CONS ORG_NAME VARCHAR2 3 12 NONE 0 20 - AUG - 17
- HT C_CONS BUILD_DATE DATE 4 10000 NONE 0 20 - AUG - 17
- HT C_CONS STATUS VARCHAR2 5 3 FREQUENCY 0 20 - AUG - 17
- SQL > select count ( 1 ) from ht . c_cons where status = 'open' ;
- Execution Plan
- ----------------------------------------------------------
- Plan hash value : 2016425671
- -------------------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes | Cost ( % CPU ) | Time |
- -------------------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 1 | 6 | 8 ( 0 ) | 00 : 00 : 01 |
- | 1 | SORT AGGREGATE | | 1 | 6 | | |
- | * 2 | INDEX FAST FULL SCAN | IDX_C_CONS_STATUS | 9639 | 57834 | 8 ( 0 ) | 00 : 00 : 01 |
- -------------------------------------------------------------------------------------------
- Predicate Information ( identified by operation id ) :
- ---------------------------------------------------
- 2 - filter ( "STATUS" = 'open' )
- Statistics
- ----------------------------------------------------------
- 1 recursive calls
- 0 db block gets
- 28 consistent gets
- 0 physical reads
- 0 redo size
- 527 bytes sent via SQL * Net to client
- 523 bytes received via SQL * Net from client
- 2 SQL * Net roundtrips to / from client
- 0 sorts ( memory )
- 0 sorts ( disk )
- 1 rows processed
- SQL >
- SQL > select count ( 1 ) from ht . c_cons where status = 'close' ;
- Execution Plan
- ----------------------------------------------------------
- Plan hash value : 2292286995
- ---------------------------------------------------------------------------------------
- | Id | Operation | Name | Rows | Bytes | Cost ( % CPU ) | Time |
- ---------------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | 1 | 6 | 1 ( 0 ) | 00 : 00 : 01 |
- | 1 | SORT AGGREGATE | | 1 | 6 | | |
- | * 2 | INDEX RANGE SCAN | IDX_C_CONS_STATUS | 24 | 144 | 1 ( 0 ) | 00 : 00 : 01 |
- ---------------------------------------------------------------------------------------
- Predicate Information ( identified by operation id ) :
- ---------------------------------------------------
- 2 - access ( "STATUS" = 'close' )
- Statistics
- ----------------------------------------------------------
- 1 recursive calls
- 0 db block gets
- 2 consistent gets
- 0 physical reads
- 0 redo size
- 526 bytes sent via SQL * Net to client
- 523 bytes received via SQL * Net from client
- 2 SQL * Net roundtrips to / from client
- 0 sorts ( memory )
- 0 sorts ( disk )
- 1 rows processed
直方图
数据
之间
端点
高度
统计
情况
数据库
数量
示例
信息
最小
单个
用户
范围
视图
频率
查询
不同
特殊
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全中心定位
电厂数据服务器
初中校园网络安全活动总结
圳市有信网络技术有限公司
怎么发布服务器
网络安全横向隔离纵向认证
物探研究院做软件开发好不好
网上租服务器贵吗
tcp服务器测评
四川农业大学dns服务器云空间
数据中心网络技术面试题
软件开发的大学课程
最全药品资料数据库2021
web项目连接数据库需要接口吗
windows远程服务器
数据库系统ims
网络安全接入准入系统
c 软件开发有什么用
科室如何构建数据库
列举常见网络安全问题有哪些
服务器备份数据有哪些产品
济南心动网络技术
网易云音乐服务器无法播放
河北软件开发单招
向正科技互联网
ff14数据库
学数据库还是软件编程好
网络安全倡议话
四川套料软件开发商
广东c语言软件开发怎么样