对于只读分析引擎而言,想要 SQL 执行结果好,则需要对表对象进行数据的基本统计信息收集。完成了统计信息收集的表,系统才会更精准的为用户执行的 SQL 进行合理的执行计划推荐。
统计信息概述
统计信息(Statistics)是关于数据库对象的数据特征和分布的信息。数据库可以利用统计信息来计算出更准确的计划代价,优化计划的选择。统计信息的类型包含表的行数、列的不同值个数(number of distinct,简称 NDV)、列的直方图等信息。统计信息的收集涉及对数据库对象的扫描与获取,并将所收集的统计信息存储于系统的数据字典,此外,系统还会在本地维护统计信息的缓存,以提升优化器访问统计信息的效率。同时,在收集使用统计信息时,需要注意以下两点:
统计信息的准确性对于优化器的决策非常重要。因此,定期更新和维护统计信息是保持数据库性能的关键。
统计信息的收集可能会对数据库的性能产生一定的影响,因为它涉及扫描和分析数据库对象。因此,在收集统计信息时需要权衡性能和统计信息的准确性。
总之,统计信息在数据库管理系统中扮演着至关重要的角色,它们提供了关于数据库对象的关键信息,协助优化器作出更为明智的决策,进而提升查询性能及整体数据库系统的效能。
说明:
在2.2410.1.0及之后的版本中支持了随机采样功能,该功能可以按照 TableScan 算子指定的采样率进行随机采样。同时可支持基于 Block 级别的采样,并且可以根据设置的比例进行统计信息收集,能够极大地降低在收集统计信息过程中因全表扫描而产生的开销。
统计信息收集
目前只读分析引擎支持两种不同的统计信息收集方式:
自动收集
在2.2410.1.0及之后的版本中,只读分析引擎内核支持了根据数据加载为列存时进行动态采样和统计信息自动收集的能力。用户无需手动收集即可生成对应库表的统计信息。
手动收集
如果需要手动获取当前表的最新统计信息,可以手动通过 MySQL 客户端登录至只读分析引擎实例中,执行如下语句即可收集指定表对象的统计信息:
ANALYZE TABLE <表名>;