内容纲要
概要描述
本文主要介绍如何通过收集表的列统计信息,对TAB_COL_STATS
的结果进行分析。
详细说明
首先我们创建样例表,并插入数据 (建表语句和插入语句见结尾内容),数据如下
执行analyze
命令,对表的列信息进行统计收集
> ANALYZE TABLE default.emp COMPUTE STATISTICS FOR COLUMNS;
收集到的统计信息,需要到元数据库(txsql/kundb)进行查看:
> SELECT * FROM TAB_COL_STATS WHERE DB_NAME='default' and TABLE_NAME='emp' order by cs_id asc;
下面是TAB_COL_STATS
表的列信息说明
列名 | 列说明 |
---|---|
cs_id | id |
db_name | 库名 |
table_name | 表名 |
column_name | 列名 |
column_type | 列类型 |
tbl_id | 表id |
long_low_value | 整数列存储整数最小值 |
long_high_value | 整数列存储整数最大值 |
double_high_value | float列存储float最小值 |
double_low_value | float列存储float最大值 |
big_decimal_low_value | decimal列存储decimal最小值 |
big_decimal_high_value | decimal列存储decimal最大值 |
num_nulls | null的数目 |
num_distincts | distinct值的数目 |
avg_col_len | string列的平均列长度 |
max_col_len | string列的最大列长度 |
num_trues | boolean列true的数目 |
num_falses | boolean列false的数目 |
last_analyzed | 最后统计时间 |
比如:
我想知道emp员工表里面,员工的最高薪资和最低薪资是多少?
sal
字段是int
类型,可以参考long_low_value
和long_high_value
字段获取到最小值和最大值。。
我想知道emp员工表里面,没有comm
奖金的人数?
- 可以参考
NUM_NULLS
字段获取到sal
列为null的数量。
我想知道emp员工表里面,哪一列数据重复值较多?
- 可以参考
num_distincts
字段获取到distinct值的数目,值越大,代表重复率越低;反之越高。
我想知道emp员工表里面,列长度的最大值和平均值?
- 注意,
avg_col_len
和max_col_len
列仅对string类型的列有效。
还有很多其他重要的统计信息可以供分析,待大家深入挖掘其中的用法。