У меня есть таблица в SQL Server 2008 R2, состоящая из примерно 400 строк (почти ничего) - у нее есть кластерный индекс первичного ключа (который является идентификатором). Таблица ссылается посредством ссылочной целостности (без каскадного удаления или обновления) примерно на 13 других таблиц.SQL Server - Плохая производительность PK delete
Вкладыши/Обновления/Получения почти мгновенные - мы говорим о раздельной секунде (как и следовало ожидать). Тем не менее, удалить с помощью ПК требуется до тех пор, как 3 минуты, и я никогда не видел его быстрее, чем 1,5 минуты:
DELETE FROM [TABLE] WHERE [TABLE].[PK_WITH_CLUSTERED_INDEX] = 1
Индекс был сильно фрагментирован - 90%. Я перестроил и реорганизовал этот индекс (вместе с остальными на эту таблицу), но я не могу получить его ниже 50%.
Кроме того, я сделал резервную копию/восстановление базы данных на локальном компьютере, и у меня нет проблем с удалением - менее секунды.
Единственное, что я не сделал, это полностью удалить кластерный индекс и повторно добавить его. Это само по себе является проблемой, поскольку SQL Server не позволяет вам отбрасывать индекс PK, когда он ссылается на другие таблицы.
Любые идеи?
Update
я должен был включить это в моем оригинальном посте. В плане выполнения помещается «виноват» на удаление кластерного индекса - 70%. Из 13 таблиц, которые ссылаются на эту таблицу, в плане выполнения говорится, что ни один из них не превышает более 3% от общего запроса - почти все попытки поиска по индексу.
Я просто сбился с толку в этот момент. Это довольно неприятно. –
Насколько велик файл данных? – ulty4life
Это около 3GB –