收集统计信息

最近更新时间:2024-08-05 17:09:11

我的收藏
对于只读分析引擎而言,想要 SQL 执行结果好,则需要对表对象进行数据的基本统计信息收集。完成了统计信息收集的表,系统才会更精准的为用户执行的 SQL 进行合理的执行计划推荐。

统计信息概述

统计信息(Statistics)是关于数据库对象的数据特征和分布的信息。数据库可以利用统计信息来计算出更准确的计划代价,优化计划的选择。统计信息的类型包含表的行数、列的不同值个数(number of distinct,简称 NDV)、列的直方图等信息。统计信息的收集涉及对数据库对象的扫描与获取,并将所收集的统计信息存储于系统的数据字典,此外,系统还会在本地维护统计信息的缓存,以提升优化器访问统计信息的效率。同时,在收集使用统计信息时,需要注意以下两点:
统计信息的准确性对于优化器的决策非常重要。因此,定期更新和维护统计信息是保持数据库性能的关键。
统计信息的收集可能会对数据库的性能产生一定的影响,因为它涉及扫描和分析数据库对象。因此,在收集统计信息时需要权衡性能和统计信息的准确性。
总之,统计信息在数据库管理系统中扮演着至关重要的角色,它们提供了关于数据库对象的关键信息,协助优化器作出更为明智的决策,进而提升查询性能及整体数据库系统的效能。

统计信息收集

通过 MySQL 客户端登录至只读分析引擎实例中,执行如下语句即可收集指定表对象的统计信息:
ANALYZE TABLE <表名>;

表的统计信息查询

查看统计信息收集情况可使用如下命令:
SHOW STATS_META [where db_name=<DBNAME>];
其中 where 子句可支持 like 查询或其他表达式过滤,可根据需求查看对应 db_name 中对象的统计信息。
查询结果的字段说明如下:
列名
说明
db_name
数据库的名字。
table_name
表的名字。
partition_name
分区的名字。
update_time
收集更新时间。
modify_count
表涉及修改的行数。
row_count
表的总行数。
查询 test 库中 t1 的表统计信息收集情况示例如下:
SHOW STATS_META WHERE db_name='test' AND table_name='t1';