我需要澄清DBMS_STATS.GATHER_TABLE_STATS是如何工作的。我有一个场景,如果我正在创建表,并且在包创建also.In中使用相同的表--换句话说,包编译依赖于表的创建。
是否必须在表创建脚本中的索引创建命令之后包含DBMS_STATS.GATHER_TABLE_STATS。
在DBMS_STATS.GATHER_TABLE_STATS工作的情况下,无论是用于包编译还是包execution.Please确认。
发布于 2017-07-01 06:00:45
DBMS_STATS向Oracle优化器提供信息,使Oracle能够为SQL语句构建高效的执行计划。优化器统计信息对于编译对象来说从来都不是必需的。
收集统计数据是一个非常复杂的问题,一开始甚至很难提出正确的问题。我建议从阅读手册开始,比如管理优化统计:基本主题。
通常,您的统计数据收集策略应该如下所示:
要回答一些具体问题,您可能不希望在创建表后立即收集统计数据。只有在更改数据后才能收集统计数据。在空表上收集统计信息可能很危险;Oracle会认为该表有0行,直到下次收集统计数据为止。最好完全没有统计数据,然后Oracle可以使用动态抽样来估计统计数据。
(但另一方面,如果表是作为SELECT语句创建的,并且包含大量数据,则可能需要收集统计信息。再说一遍,如果使用12c,在创建表时它可能会自动收集统计信息。)
通常也不需要在创建索引之后收集统计信息。Oracle会在创建或重建索引时自动收集索引统计信息。
https://stackoverflow.com/questions/44841480
复制相似问题