KB4577933 - ИСПРАВЛЕНО: каскадное удаление ключевых значений за пределами границ гистограммы первой таблицы вызывает сканирование индекса в SQL Server 2017 и 2019

Применяется к
SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Standard on Windows SQL Server 2019 on Windows

Проблема

Предположим, что в таблице используется ограничение внешнего ключа с каскадным удалением, а статистика в столбце внешнего ключа не охватывает весь диапазон значений ключа в таблице (например, из-за того, что статистика не обновлялась после изменения распределения данных в таблице). В этом сценарии при попытке удалить строку, соответствующую значению ключа, не представленному на гистограмме статистики, и оптимизатор запросов использует оценку кратности по умолчанию, операция удаления выполняется медленнее, чем ожидалось. Вы также можете заметить, что для поиска строк в ссылочной таблице используется операция сканирования индекса.

Состояние

Корпорация Майкрософт подтвердила, что это проблема продуктов Microsoft, перечисленных в разделе «Относится к».

Решение

Эта проблема устранена в следующих накопительных обновлениях для SQL Server:

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

Сведения о накопительных обновлениях для SQL Server:

Каждый новый накопительный пакет обновления для SQL Server содержит все исправления и исправления безопасности, которые входили в состав предыдущего накопительного пакета обновления. Ознакомьтесь с последними накопительными пакетами обновления для SQL Server:

Временное решение

Для временного решения этой проблемы используйте один из следующих способов:

  • Используйте устаревшую оценку кратности. Дополнительные сведения см. в разделе Оценка количества элементов (SQL Server).
  • Удалите каскадное удаление из определения внешнего ключа и выполните операцию удаления, используя JOIN между родительской и дочерними таблицами для выполнения эквивалента каскадного удаления.
  • Обновление статистики в родительской таблице с помощью функции FULLSCAN перед удалением данных.

Ссылки

Узнайте о терминологии, используемой корпорацией Майкрософт для описания обновлений программного обеспечения.