Проблемы
Предположим, что в таблице используется ограничение внешнего ключа для каскадного удаления, а статистика по столбце внешнего ключа не охватывает весь диапазон значений ключей в таблице (например, поскольку статистика не обновлялась после изменения распределения данных в таблицу). В этом случае при попытке удалить строку, соответствующую значению ключа, не представленного на гистограмме статистики, и оптимизатор запросов использует оценку статистической емки по умолчанию, операция удаления происходит медленнее, чем ожидалось. Вы также можете заметить, что для поиска совпадающих строк в таблице, ссылаемой на таблицу, используется операция сканирования индекса.
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".
Решение
Эта проблема устранена в следующих накопительных обновлениях для SQL Server:
Примечание. Это исправление включено только в том случае, если включена оптимизация исправлений (с помощью параметра конфигурации уровня базы данных, подсказки запроса или флага трассировки 4199).
О накопительных обновлениях для SQL Server:
Каждое новое накопительное SQL Server содержит все исправления для системы безопасности, которые были включены в предыдущее накопительное обновление. Ознакомьтесь с последними накопительными обновлениями для SQL Server:
Обходное решение
Чтобы обойти эту проблему, воспользуйтесь одним из описанных ниже методов.
-
Использование устаревшей оценки индивидуальность. Дополнительные сведения см.в SQL Server.
-
Удалите каскадное удаление из определения внешнего ключа и выполните операцию удаления с помощью операции JOIN между родительской и родительской таблицами, чтобы выполнить эквивалент каскадного удаления.
-
Перед удалением данных обновите статистику родительской таблицы с помощью fullSCAN.
Ссылки
Узнайте о терминологии, используемой Майкрософт для описания обновлений программного обеспечения.