0

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

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

有没有办法优化这个?提前致谢。

4

2 回答 2

0

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

在事实表的键列上添加索引可能就足够了。然后 Oracle 可以立即判断任何给定值是否/在哪里。

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

于 2016-02-06T02:34:44.440 回答
0

您也可以尝试这些策略:

创建事实表的另一个副本,但没有要清理的表的暗外键列。

创建 fact_table_new 作为 select dim1_k, dim2_k, dim3_k, dim4_k, dim5_k (不是本列), fact_1, fact_2, ... from fact_table ;

或者

update fact_table set dim5_fk_col = null where dim5_fk_col in (select k_col from dim5_table) ;

于 2016-02-06T02:45:22.090 回答