首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DBMS_STATS.GATHER_TABLE_STATS在甲骨文中的工作方式

问DBMS_STATS.GATHER_TABLE_STATS在甲骨文中的工作方式
EN

Stack Overflow用户
提问于 2017-06-30 07:57:00
回答 1查看 2.2K关注 0票数 0

我需要澄清DBMS_STATS.GATHER_TABLE_STATS是如何工作的。我有一个场景,如果我正在创建表,并且在包创建also.In中使用相同的表--换句话说,包编译依赖于表的创建。

是否必须在表创建脚本中的索引创建命令之后包含DBMS_STATS.GATHER_TABLE_STATS。

在DBMS_STATS.GATHER_TABLE_STATS工作的情况下,无论是用于包编译还是包execution.Please确认。

EN

回答 1

Stack Overflow用户

发布于 2017-07-01 06:00:45

DBMS_STATS向Oracle优化器提供信息,使Oracle能够为SQL语句构建高效的执行计划。优化器统计信息对于编译对象来说从来都不是必需的。

收集统计数据是一个非常复杂的问题,一开始甚至很难提出正确的问题。我建议从阅读手册开始,比如管理优化统计:基本主题。

通常,您的统计数据收集策略应该如下所示:

  1. 每当对象的数据发生显着变化时,手动收集统计信息。
  2. 使用默认自动任务自动收集正在缓慢更改或意外忘记的对象的统计信息。

要回答一些具体问题,您可能不希望在创建表后立即收集统计数据。只有在更改数据后才能收集统计数据。在空表上收集统计信息可能很危险;Oracle会认为该表有0行,直到下次收集统计数据为止。最好完全没有统计数据,然后Oracle可以使用动态抽样来估计统计数据。

(但另一方面,如果表是作为SELECT语句创建的,并且包含大量数据,则可能需要收集统计信息。再说一遍,如果使用12c,在创建表时它可能会自动收集统计信息。)

通常也不需要在创建索引之后收集统计信息。Oracle会在创建或重建索引时自动收集索引统计信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44841480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档