Oracle - медленно удаляется одна строка в таблице измерений

У меня есть datamart с 5 таблицами измерений и таблицей фактов. Я пытаюсь очистить таблицу измерений, которая имеет несколько строк (4000 строк). Но таблица фактов содержит миллионы строк (25 ГБ)(индексы и разделы).

Когда я пытаюсь удалить строку в измерении таблицы, процесс становится очень медленным. Это так же медленно, несмотря на отсутствие связи со строкой в ​​таблице фактов (каскадное удаление).

Есть ли способ оптимизировать это? Заранее спасибо.

2 ответа

Решение

Предположительно, между таблицей измерений и таблицей фактов происходит какое-то каскадное удаление.

Добавление индекса для ключевого столбца в таблице фактов может быть достаточно. Тогда Oracle может сразу сказать, есть ли какое-либо заданное значение.

Если это не сработает, полностью удалите ограничение внешнего ключа. Удалите неиспользуемые значения и добавьте ограничение обратно.

Вы также можете попробовать эти стратегии:

создайте еще одну копию таблицы фактов, но без очищенного столбца внешнего ключа таблицы.

создать 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 = null, где dim5_fk_col in (выберите k_col из dim5_table);

Другие вопросы по тегам