Oceanbase-Topk直方图

文章目录

计算公式:

(1 - (1 / bucket_size)) * 100

这个计算公式,用来确定在 Topk 直方图中,哪些值会被认为是"重要值",即超过特定的百分比阈值时会被记录在直方图中。它反映了每个桶(bucket)在直方图中的重要性。让我们具体解释一下如何理解这个公式。

公式的含义:

bucket_size:直方图的桶数(即最大不同值的数量),通常为254。这意味着直方图最多可以容纳254个不同的值(或频率最高的254个值)。

(1 - (1 / bucket_size)) * 100:这个计算表示单个桶在总体中的最低百分比权重。若某个值的频率低于这个百分比,就不会被记录在直方图中。

举例解释

场景设定

假设有一张包含 10,000 行数据的表,某列的数据分布如下:

出现次数
A 5000
B 2000
C 500
D 200
E 100
F 100
G 100
H 100
其他 1900

在这张表中,有几个数据的出现频率相对较高(比如 A 和 B),其余数据的出现频率较低。

使用 Topk 直方图

我们为这个列创建 Topk 直方图,并设置bucket_size = 254。此时,公式计算的最低百分比阈值为:

(1 - (1 / bucket_size)) * 100=(1-(1/254))*100=99.60%

这意味着在直方图中,只有出现频率超过总数据量的 0.4% 的值会被记录在直方图中。对于这张 10,000 行的数据表:

0.4% 的 10,000 行是 40 行。因此,只有出现次数超过 40 的值才会被记录在直方图中。

直方图记录情况

根据这个标准,我们来看看哪些值会被记录在直方图中:

出现次数 记录情况
A 5000 记录
B 2000 记录
C 500 记录
D 200 记录
E 100 记录
F 100 记录
G 100 记录
H 100 记录
其他 1900(每个值少于40次) 不记录

结果分析

A、B、C 等值因其出现频率超过了 0.4%,所以被记录在直方图中。

其他值(合计 1900 次,但每个值单独的出现次数都低于 40 次)不会被记录在直方图中,因为它们的出现频率低于 0.4%,被认为对优化查询不重要。

总结

这个最低百分比阈值的目的是确保直方图只记录出现频率较高的"重要"值,从而减少直方图的大小和复杂度,使查询优化器能够更高效地使用这些频率信息。

相关推荐
ActionTech14 天前
ChatDBA VS DeepSeek:快速诊断 OceanBase 集群新租户数据同步异常
oceanbase·deepseek·chatdba·爱可生
码农老起14 天前
从Oracle到OceanBase数据库迁移:全方位技术解析
数据库·oracle·oceanbase
OceanBase数据库官方博客15 天前
数据文件误删除,OceanBase中如何重建受影响的节点
oceanbase·分布式数据库·运维管理·实践经验
码农老起18 天前
OceanBase数据库基于脚本的分布式存储层性能深度优化
数据库·分布式·oceanbase
码农老起18 天前
万亿级数据量的OceanBase应用从JVM到协议栈立体化改造实现性能调优
jvm·oceanbase
OceanBase数据库官方博客20 天前
OceanBase 读写分离最佳实践
oceanbase·分布式数据库·读写分离·最佳实践
OceanBase数据库官方博客22 天前
网易云信架构升级实践,故障恢复时间缩至8秒
oceanbase·分布式数据库·架构选型·布道师计划
OceanBase数据库官方博客24 天前
自然语言秒转SQL—— 免费体验 OB Cloud Text2SQL 数据查询
数据库·sql·ai·oceanbase·分布式数据库·向量·text2sql
OceanBase数据库官方博客1 个月前
关于OceanBase与CDH适配的经验分享
oceanbase·分布式数据库·cdh
OceanBase数据库官方博客1 个月前
石基大商:OceanBase + Flink CDC,搭建连锁零售系统数据湖
flink·oceanbase·分布式数据库·实时数仓·零售