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