Oracle - 删除维度 Table 中的一行很慢

Oracle - Delete One Row in Dimension Table is Slow

我有一个具有 5 个维度 table 和一个事实 table 的数据集市。 我正在尝试清理具有几行(4000 行)的维度 table。但是,事实 table 有数百万行 (25GB)(索引和分区)。

当我尝试删除 table 维度中的一行时,过程变得非常缓慢。尽管在事实 table(级联删除)中没有与行的关系,但它还是很慢。

有什么办法可以优化吗?。提前致谢。

据推测,维度 table 和事实 table 之间存在某种级联删除。

在事实 table 中的键列上添加索引可能就足够了。然后 Oracle 可以立即告诉 if/where 任何给定的值是。

如果这不起作用,请完全删除外键约束。删除未使用的值并重新添加约束。

您也可以尝试这些策略:

创建事实 table 的另一个副本,但是 table 的模糊外键列没有被清除。

创建 fact_table_new 作为 select dim1_k, dim2_k, dim3_k, dim4_k, dim5_k(不是这一栏), fact_1, fact_2, ... 来自 fact_table ;

更新fact_table 设置 dim5_fk_col = 空 其中 dim5_fk_col in (select k_col from dim5_table) ;