我有一个带有 5 个维度表和一个事实表的数据集市。我正在尝试清理一个只有几行(4000 行)的维度表。但是,事实表有数百万行(25GB)(索引和分区)。
当我尝试删除表维度中的一行时,该过程变得非常缓慢。尽管与事实表中的行没有关系(级联删除),但它仍然很慢。
有没有办法优化这个?提前致谢。
据推测,维度表和事实表之间存在某种级联删除。
在事实表的键列上添加索引可能就足够了。然后 Oracle 可以立即判断任何给定值是否/在哪里。
如果这不起作用,请完全删除外键约束。删除未使用的值并重新添加约束。
您也可以尝试这些策略:
创建事实表的另一个副本,但没有要清理的表的暗外键列。
创建 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) ;