Производительность Oracle - отключение FK, чтобы оператор DELETE работал быстрее? - PullRequest
1 голос
/ 13 мая 2011

При удалении из большой таблицы в Oracle - назовем это таблицей X - имеет ли смысл отключать FK таблицы X, которые не имеют ON DELETE CASCADE?Я не имею в виду отключение FK в других таблицах, которые ссылаются на таблицу X, а просто на отключение FK в таблице X для повышения производительности операторов DELETE.

Я делаю индексы таблицы X непригодными,но УДАЛЕНИЕ все еще занимает некоторое время.

Я думаю, что эти FK не имеют значения для производительности оператора DELETE, так как мы просто удаляем, а не вставляем или обновляем, поэтому FK не нужно проверять.Что ты думаешь?

Ответы [ 2 ]

1 голос
/ 14 мая 2011

Это похоже на действительно плохую идею.Независимо от того, что вы делаете, у вас будет период, когда ссылочная целостность не обеспечивается в вашей базе данных.Затем вы возвращаете FK обратно на место, и, к сожалению, кто-то вставил недопустимую строку.

Кроме того, ALTER TABLE - это оператор DDL, поэтому при его выполнении будет выполнена любая работа до этого момента.Вы потеряете возможность отката, если что-то пойдет не так в другом месте вашей транзакции.

Можете ли вы просмотреть план объяснения, чтобы понять, почему ваше заявление DELETE занимает так много времени?

0 голосов
/ 28 июня 2011

В конце концов мне не пришлось отключать эти FK перед запуском процесса архивации и включать их по окончании процесса.Но вместо этого, чтобы повысить производительность операторов DELETE, нам пришлось отбросить индексы до начала процесса архивирования и воссоздать их после завершения процесса архивирования.Мы также совершали чаще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...