KingbaseES使用ANALYZE收集统计信息
关键字:
优化器、统计信息、ANALYZE、人大金仓、KingbaseES
一、摘要
本文首先介绍了数据库中统计信息的重要性,然后介绍了KingbaseES中使用ANALYZE收集统计信息的方法。
数据库统计信息
统计信息在数据库中起着重要的作用,他们提供了关于表、索引和列的数据分布、选择性和数据相关性的信息。这些统计信息对于优化查询计划、确定索引使用、评估查询成本以及提高数据库性能非常关键。
统计信息的重要性在于:
- 查询优化:查询优化器使用统计信息来评估查询条件的选择性,即某个值在列中出现的频率。通过了解选择性,优化器可以决定使用哪个索引、连接顺序和连接方法,以生成最佳执行计划。
- 成本估算:统计信息提供了表和索引的大小、数据分布和数据相关性等信息,这对于优化器来说是评估查询成本的重要依据。优化器使用这些信息来估算执行查询所需的资源和时间。准确的统计信息估计可以帮助优化器选择最佳的执行计划,从而提高查询性能。
- 索引选择:统计信息对于确定是否使用索引以及选择合适的索引非常重要。通过了解列的数据分布和选择性,可以确定哪些列适合创建索引以提高查询性能。
假如一个包含订单信息的表,其中包括订单日期、订单金额和客户ID等列。通过收集统计信息,数据库可以了解订单日期的数据分布,例如每个月的订单数量,从而优化查询计划。如果某个月的订单数量非常大,数据库可能会选择使用索引来快速定位该月的订单数据,而不是全表扫描。此外,统计信息还可以提供订单金额的数据分布,帮助数据库评估查询成本并选择合适的执行计划。
KingbaseES中使用ANALYZE获取统计信息
KingbaseES中使用ANALYZE来获取统计信息。ANALYZE收集一个数据库中的表的内容的统计信息,并且将结果存储在sys_statistic系统目录中。接下来,查询规划器会使用这些统计信息来帮助确定查询最有效的执行计划。具体的使用方法如下:
ANALYZE [ ( option [, ...] ) ] [ table_and_columns [, ...] ]
ANALYZE [ VERBOSE ] [ table_and_columns [, ...] ]
其中option可以是:
VERBOSE [ boolean ]
SKIP_LOCKED [ boolean ]
table_and_columns是:
table_name [ ( column_name [, ...] ) ]
其中VERBOSE表示允许显示进度消息。SKIP_LOCKED表示指定ANALYZE在开始处理一个关系时不应等待任何冲突锁被释放:如果一个关系不能立即被锁定而不等待,则跳过该关系。注意,即使使用这个选项,ANALYZE在打开关系的索引或从分区、表继承子表和某些类型的外部表获取样本行时仍然可能阻塞。另外,通常当ANALYZE处理指定分区表的所有分区时,如果分区表上有冲突的锁,则该选项将导致ANALYZE跳过所有分区。boolean表示指定所选选项应该打开还是关闭。可以编写TRUE、ON、或1来启用这个选项,FALSE、OFF、或0来禁用它。也可以省略boolean,此时假设为TRUE。table_name表示要分析的一个指定表的名称(可以是模式限定的)。如果省略,则分析当前数据库中的所有常规表、分区表和物化视图(但不分析外表)。如果指定的表是分区表,那么将更新整个分区表的继承统计信息和各个分区的统计信息。column_name表示要分析的一个指定列的名称。默认是所有列。当指定了VERBOSE时,ANALYZE会发出进度消息来指示当前正在处理哪个表。还会打印有关那些表的多种统计信息。
对表t1进行统计信息收集的方式如下所示:
ANALYZE t1;




