sql - 如果oracle数据库中的某个表是空表统计的,那么如何恢复该表的原始统计信息呢?

标签 sql database oracle performance query-optimization

此处讨论的表格按以下方式工作: 让我们考虑这里有问题的表是表 A,还有另外两个表 B 和 C。 表C接收首先接收来自外部系统的所有数据。 然后数据被传输到表 B,在那里它被处理,并且该数据的副本也在表 A 中创建。随着数据在表 B 中继续处理,数据的状态在 A 和 B 中都发生变化。一旦所有数据都在表 B 中处理,表从表 A 中删除。

所以基本上表A将要由表B处理的数据排队。

尽管表 A 在特定时间拥有数千条记录,但当表 A 为空时,统计信息以某种方式收集在表 A 中。 因此,该表的样本大小变为零。有什么办法可以在表中恢复原始统计信息。

在oracle网站上看到dbms_stats包的恢复过程有助于恢复原始统计信息。但是还有其他方法吗?恢复统计信息是否有助于恢复处理性能?

最佳答案

最简单的方法似乎就是在您需要新数据时重新计算统计数据。当然,这仅在统计计算时间不太长的情况下才有意义。


否则,RESTORE_TABLE_STATS Procedure可能是最简单的方法:

This procedure restores statistics of a table as of a specified timestamp (as_of_timestamp). The procedure will restore statistics of associated indexes and columns as well.

考虑:

exec dbms_stats.restore_table_stats(
    ownname => 'myschema',
    tabname => 'mytable',
    as_of_timestamp => 'mytimestamp'
);

最后,另一种选择是按照以下步骤手动导出/导入统计信息:

This blog link提供了有关如何进行的详细示例。

关于sql - 如果oracle数据库中的某个表是空表统计的,那么如何恢复该表的原始统计信息呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57938267/

相关文章:

mysql:选择最后 10 条消息,并为每条消息选择最后 3 条回复

sql - 在SQL中更新JSON数组中的现有JSON值

mysql - 我在 MySQL 中有 4 个表 - 与第 4 个表连接,没有重复项(可能为空值)

sql - PostgreSQL:使用 JSON 时计数数据非常慢

database - 我如何更新 pl/sql 中嵌套表的列?

ios - 定义 Realm 数据库结构 (Swift)

objective-c - 是否可以存储和检索使用 Objective-C 创建的对象? (在数据库中,用于 iOS 应用程序)

sql - PL/SQL - 在 FOR IN LOOP 中删除当前记录

从列中查找大写单词的 SQL

oracle - 可以在触发器内动态创建 JOB 吗?