Symptomen
Stel dat u een tabel hebt waarin de beperking voor de foreign-sleutel trapsgetal is ingesteld om te worden verwijderd, en dat de statistieken van de kolom met de vreemde sleutel niet het hele bereik van de sleutelwaarden in de tabel omvatten (bijvoorbeeld omdat statistieken niet zijn bijgewerkt nadat gegevensdistributie in de tabel is gewijzigd). Als u in dit scenario een rij probeert te verwijderen die overeenkomt met een sleutelwaarde die niet wordt weergegeven in het statistisch histogram en de Query Optimizer de standaard-kardinaliteitschatting gebruikt, verloopt de verwijderbewerking trager dan verwacht. U ziet mogelijk ook dat er een scanbewerking wordt uitgevoerd om de overeenkomende rijen in de verwijzende tabel te vinden.
Status
Microsoft heeft bevestigd dat dit probleem zich kan voordoen in de Microsoft-producten die worden vermeld in de sectie Van toepassing op.
Oplossing
Dit probleem is opgelost in de volgende cumulatieve updates voor SQL Server:
Opmerking: Deze oplossing wordt alleen ingeschakeld wanneer u hotfixes voor optimizer inschakelen (via de configuratieoptie voor databasebereik, hints voor query's of traceervlag 4199).
Cumulatieve updates voor SQL Server:
Elke nieuwe cumulatieve update voor SQL Server bevat alle hotfixes en alle beveiligingsfixes die zijn opgenomen in de vorige cumulatieve update. Bekijk de meest recente cumulatieve updates voor SQL Server:
Workaround
Om dit probleem te omzeilen, kunt u een van de volgende methoden gebruiken:
-
Gebruik de verouderde kardinaliteitschatting. Zie Cardinaliteitschatting (SQL Server) voor meer informatie.
-
Verwijder trapsgecodeerd verwijderen uit de definitie van de foreign key en voer de verwijderbewerking uit met JOIN tussen bovenliggende en onderliggende tabellen om het equivalent van trapsgewaardeerd verwijderen uit te voeren.
-
Werk statistieken van de bovenliggende tabel bij met FULLSCAN voordat u gegevens gaat verwijderen.
Verwijzingen
Lees meer over de terminologie die Microsoft gebruikt om software-updates te beschrijven.