Симптоми
Да предположим, че таблица използва ограничение на външен ключ, зададено за каскадно изтриване, а статистиката в колоната с външен ключ не покрива целия диапазон от стойности на ключ в таблицата (например: защото статистиката не е актуализирана след промени в разпределението на данните в таблицата). В този сценарий, когато се опитате да изтриете ред, съответстващ на ключова стойност, която не е представена в хистограмата на статистиката, а оптимизаторът на заявките използва оценката по подразбиране за брой обекти, операцията по изтриване е по-бавна от очакваното. Може също да забележите, че се използва операция за сканиране на индекса за намиране на съответстващите редове в препращащата таблица.
Състояние
Microsoft потвърждава, че това е проблем в продуктите на Microsoft, които са изброени в раздела „Важи за“.
Решение
Този проблем е решен в следните кумулативни актуализации за SQL Server:
Забележка: Тази корекция е активирана само когато включите оптимизиращите горещи поправки (или чрез опцията за конфигуриране в обхвата на базата данни, чрез подсказване за заявка, или чрез флаг за проследяване 4199).
За кумулативните актуализации за SQL Server:
Всяка нова кумулативна актуализация за SQL Server съдържа всички актуални поправки и корекции на защитата, които са били включени в предишната кумулативна актуализация. Прегледайте последните кумулативни актуализации за SQL Server:
- Последна кумулативна актуализация за SQL Server 2019
- Последна сборна актуализация за SQL Server 2017
Заобиколно решение
За да решите проблема по заобиколен начин, използвайте един от следните методи:
- Използвайте наследена оценка на брой обекти. За повече информация вж. "Оценка на брой обекти" (SQL Server).
- Премахнете каскадно изтриване от дефиницията на външен ключ и изпълнете операцията по изтриване, като използвате JOIN между родителска и дъщерна таблица, за да постигнете еквивалента на каскадно изтриване.
- Актуализирайте статистиката за родителската таблица с FULLSCAN, преди да изтриете данните.
Справки
Научете повече относно терминологията, която Microsoft използва за описване на актуализациите на софтуера.