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) ;
我有一个具有 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) ;