Symptom
Anta att du har en tabell som använder en begränsning för en utländsk nyckel som ska tas bort i relaterade, och att statistiken för kolumnen för externa nycklar inte omfattar hela området med nyckelvärden i tabellen (till exempel eftersom statistik inte uppdaterades efter att datafördelningen har ändras i tabellen). I det här scenariot, när du försöker ta bort en rad som motsvarar ett nyckelvärde som inte finns med i statistik histogrammet, och frågeoptimeraren använder standard kardinalitetsberäkningen, blir borttagningsåtgärden långsammare än väntat. Du kanske också märker att en indexsökning används för att hitta matchande rader i referenstabellen.
Status
Microsoft har bekräftat att det är ett problem i de Microsoft-produkter som listas i avsnittet "Gäller för".
Lösning
Det här problemet är åtgärdat i följande kumulativa uppdateringar för SQL Server:
Obs! Den här korrigeringen aktiveras bara när du aktiverar optimeringskorrigeringar (via det databasomfattningsalternativ, frågetips eller spårning av flagga 4199).
Om kumulativa uppdateringar för SQL Server:
Varje ny kumulativ uppdatering för SQL Server innehåller alla snabbkorrigeringar och alla säkerhetskorrigeringar som inkluderades i den föregående kumulativa uppdateringen. Kolla in de senaste kumulativa uppdateringarna för SQL Server:
Lösning
Använd någon av följande metoder för att lösa problemet:
-
Använd äldre kardinalitetsberäkningar. Mer information finns i Kardinalitetsberäkning (SQL Server).
-
Ta bort borttagningen av relaterade från definitionen av foreign key och utför borttagningen genom att använda JOIN mellan överordnade och underordnade tabeller för att utföra motsvarande borttagning av relaterade.
-
Uppdatera statistik i den överordnade tabellen med FULL FLERA innan du tar bort data.
Referenser
Läs mer om terminologin som Microsoft använder för att beskriva programuppdateringar.