TIDB 收集统计信息时,为什么要收集非索引列的统计信息呢?

请问下各位大佬,在TIDB 收集统计信息时,为什么要收集非索引列的统计信息呢?MySQL是只会收集索引列的统计信息的,谢谢

可能是MySQL和TiDB的生成执行计划的依据不同

tidb好像还要依据一些其他的算子,所以才需要统计其他列

https://docs.pingcap.com/zh/tidb/stable/choose-index#索引的选择

1 Like

Oracle也会收集非索引列。其实收集非索引列有助于自动化。

1 Like

收集了才之后才知道走索引合适还是走全表扫描合适。

判断回表与否的代码,select * 的代价

1 Like

那直接收集统计表的统计信息就可以了嘛,不需要收集每个列的统计信息吧?

1 Like

优化器框架 一般优化器分两个阶段进行优化,即基于规则的优化(Rule-Based-Optimization,简称 RBO )和基于代价的优化(CBO)
基于代价的优化(CBO)需要计算最短路径(根据统计信息:有的时候走索引反而没有不走索引列快)

1 Like