gpt4 book ai didi

sql - 每次创建索引时是否都需要运行 gather_table_stats 以便 Oracle 优化器使用它?

转载 作者:行者123 更新时间:2023-12-04 17:50:11 27 4
gpt4 key购买 nike

我看到了一些创建索引的例子。之后执行了以下操作:

exec dbms_stats.gather_table_stats(...)

这有必要让Oracle关注索引吗?我认为每晚都会收集统计数据(?),但在某些情况下,我创建的索引对随后的解释计划感到失望。也许我错过了一步?

最佳答案

这取决于 Oracle 的版本。

在 9i 之前的版本中,您必须在创建索引后显式收集统计信息,然后基于成本的优化器才有实际使用它的机会。

在 9i 中,Oracle 在 CREATE INDEX 语句中添加了 COMPUTE STATISTICS 子句。这允许您在索引创建过程中收集有关索引的统计信息。如果您没有指定 COMPUTE STATISTICS,您仍然必须在 CBO 考虑之前手动收集统计信息。

在 10g 中,默认行为发生了变化,Oracle 将在您创建索引时自动计算索引的统计信息,而无需您指定 COMPUTE STATISTICS。出于习惯或因为他们只是更新旧的示例代码,人们通常仍会在他们发布的示例中包含 GATHER_INDEX_STATS 调用。

在 10g 及更高版本中,默认情况下会创建一个后台作业,用于收集有关缺少统计信息的对象和其统计信息在夜间过时的对象的统计信息。 DCookie 对 10g 作业的解释是正确的。 Oracle 改变了在 11g 中设置作业的方式,但它本质上仍然在做同样的事情。

关于sql - 每次创建索引时是否都需要运行 gather_table_stats 以便 Oracle 优化器使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4159063/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com