在基于临时会话的表上创建索引后运行统计信息

Posted

技术标签:

【中文标题】在基于临时会话的表上创建索引后运行统计信息【英文标题】:Run stats after creating index on a temporary session based table 【发布时间】:2015-04-10 10:15:04 【问题描述】:

数据库:- DB2 我已经编写了一个操作数据以获得最终输出的程序。 基于临时会话的表用于相同的目的。 由于这些临时表中的数据量很大,因此会创建索引。

能否请我就创建索引后是否应该运行统计信息获得建议??

我在某处读到运行统计信息是数据库级别而不是会话级别。 调整大型临时表的正确方法是什么?

【问题讨论】:

答案取决于 DB2 版本和平台。 db2 版本为 9.1.2 【参考方案1】:

既然您创建了索引,就会假设您已经进行了性能分析并确定需要这些索引。如果是这种情况,谨慎的做法是获取这些索引的最新统计信息,否则它们可能没有那么有用。

您可以在创建索引时生成索引统计信息:CREATE INDEX ... UPDATE STATISTICS

如果在您的环境中启用了自动 RUNSTATS,您也可以依赖它,但是,鉴于临时表的瞬态特性,自动维护可能不足以满足您的目的。

【讨论】:

【参考方案2】:

我看到你也标记了 Oracle

在 Oracle 中,您不需要在创建新索引之后收集统计数据

来自documentation,

Oracle 数据库现在在索引期间自动收集统计信息 创建和重建。

【讨论】:

以上是关于在基于临时会话的表上创建索引后运行统计信息的主要内容,如果未能解决你的问题,请参考以下文章

在具有聚集列存储索引的表上创建触发器 - 错误

在已有大量数据的表上创建 MySQL 索引

mysql在具有1亿行的表上创建索引

mysql 临时表的建立和用途

在包含数百万行和多个过滤器的表上创建哪些索引

MySQL创建临时表?