统计信息问题

@h5n1啊,我在上面的基础上再补充一下,针对

测试了下,不知道采样如何实现的,100条和10000条的时间差异不大。

目前的统计信息 大致上维护了如下的信息

  1. 每一行的有多少个不同的值
  2. NULL count
  3. 数据分布(直方图、Top-N or Most frequent value in some databases、Count-Min Sketch(removed in version 2))

这里 NULL count/数据分布 是可以用采样的数据来计算的

但是每一行的有多少个不同的值这项在内部的测试中,如果数据倾斜比较严重的话,通过采样数据来计算这个值会带来比较大的误差。因此这一项在目前最新的 TiDB 实现中,仍然是扫描所有的行来计算一个比较精确的数据。

因此指定很小的 samples 也会发现执行时间并没有太大的变化,因为这个时候主要的开销在计算这个 每行不同的值的个数

1 个赞