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);