人大金仓KingbaseES支持混合直方图统计信息

228 阅读3分钟

KingbaseES支持混合直方图统计信息

关键字:

优化器、统计信息、直方图、人大金仓、KingbaseES

一、摘要

本文首先介绍了数据库中直方图的相关概念,然后介绍了KingbaseES中混合直方图的使用。

直方图概念

在数据库统计中,直方图(Histogram)是一种用于描述数据分布的统计工具。它将数据值按照一定的范围划分为不同的区间,并计算每个区间内的数据值数量或频率。直方图提供了对数据分布的可视化表示,可以帮助优化器更准确的估计查询执行计划的成本。

直方图在数据库优化中的作用是帮助优化器更好的理解数据分布,从而更准确的选择执行计划。通过直方图,优化器可以了解数据的值范围、数据的分布情况以及数据的密度等信息,进而决定使用哪些索引、连接顺序或其他查询操作,以获得更高效的查询执行计划。

根据数据的分布特性和统计信息的收集方式,直方图可以分为以下几类:

  1. 简单直方图(Simple Histogram):简单直方图将数据划分为离散的区间,并统计每个区间内的数据值数量。每个区间通常具有相等的宽度或高度。当具有相等宽度时,称为等宽直方图。当具有相同高度时,称为登高直方图。
  2. 高频直方图(Height Balance Histogram):高频直方图是一种改进的直方图,它在简单直方图的基础上引入了频率信息。除了统计每个区间内的数据值的数量,还记录了每个区间的频率(数据值数量与总数据量的比值)。
  3. 混合直方图(Hybrid Histogram):混合直方图是一种结合了简单直方图和高频直方图的直方图。它通过将数据划分为离散的区间,并统计每个区间内的数据值数量和频率来描述数据的分布情况。混合直方图提供了更丰富的数据分布信息,可以更准确的反应数据的不均匀性。

KingbaseES中的混合直方图

对KingbaseES中混合直方图默认关闭,通过设置全局参数enable_hybrid_hist来开启混合直方图,如下所示:

kingbase=# show enable_hybrid_hist;
enable_hybrid_hist
--------------------
off
(1 row)

kingbase=# set enable_hybrid_hist = on;
SET

kingbase=# show enable_hybrid_hist;
enable_hybrid_hist
--------------------
on
(1 row)

可以通过sys_stats来查看混合直方图的具体数据,sys_stats的具体描述如下:

其中hybrid_histogram_*为混合直方图的数据信息,hybrid_histogram_bounds为边界值,hybrid_histogram_freq为桶的频率,hybrid_histogram_bounds_freqs为边界值的频率。

下面介绍具体的生成混合直方图以及查看混合直方图的方式。首先建立t1表,并向t1中插入数据如下:

create table t1 (c1 int);
insert into t1 select 1 from generate_series(1, 10) as i;
insert into t1 select 2 from generate_series(1, 20) as i;
insert into t1 select 3 from generate_series(1, 30) as i;
insert into t1 select 4 from generate_series(1, 40) as i;

然后,使用ANALYZE命令对t1进行统计信息收集,在收集之前调整default_statistics_target参数,确保直方图统计数据开启,具体如下:

set default_statistics_target = 1;
analyze t1;

最后,查看sys_stats中关于表t1的统计信息,如下图所示。

可以看到,混合直方图相关的列上已经有了统计信息。

参考文档:

KingbaseES V8用户手册