我有一些关于优化此类负载的问题。

构建一个新的数据表,将其加载到分区表中,然后在此新表上构建索引。

  1. 您应该使用COMPUTE STATISTICS选项构建索引还是使用DBMS_Stats的Cascade选项?

  2. 您应该在交换前在桌面上收集统计信息,还是在交换后收集分区上的统计信息?

  3. 如果在交换后执行此操作并在参数列表中指定分区名称,则粒度参数具有哪些相互作用?例如,如果我指定一个分区名称,然后将粒度设置为“GLOBAL AND PARTITION”,那么Global会做什么吗?是只是那个分区吗?

有帮助吗?

解决方案

  

您应该使用COMPUTE STATISTICS选项构建索引还是使用DBMS_Stats的Cascade选项?

如果这是一个数据仓库,那么首先考虑不收集统计数据,并使用动态采样。其次,如果你收集统计数据,那么一定要使用索引上的计算统计数据。

  

你应该在交换之前在桌面上收集统计数据还是在交换之后收集分区?

在交换之前收集有关新数据表的统计信息以获取有关新数据的分区统计信息 - 之后收集分区表上的统计信息以收集表统计信息

  

如果在交换后执行此操作并在参数列表中指定分区名称,粒度参数具有哪些相互作用?例如,如果我指定一个分区名称,然后将粒度设置为“GLOBAL AND PARTITION”,那么Global会做什么吗?它只做那个分区吗?

见上文。

说真的,没有统计数据和动态抽样的机会。

其他提示

  1. DBMS_STATS 被认为是计算此版本统计信息的正确方法。使用 COMPUTE STATISTICS 构建索引是可行的,但通常您希望一次计算所有统计数据并拍摄快照。

  2. 您希望在交换后收集统计信息。这样,优化器将使用该分区的数据进行最佳猜测。

  3. 你为什么要放两个?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top