KB4577933 - FIX: trapsgewijs verwijderen van sleutelwaarden buiten de grenzen van het histogram van de voorlooptabel veroorzaakt een indexscan in SQL Server 2017 en 2019

Van toepassing op
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

Symptomen

Stel dat u een tabel hebt met een refererende-sleutelbeperking die is ingesteld op trapsgewijs verwijderen, en dat de statistieken in de kolom met de refererende sleutel niet het volledige bereik van de sleutelwaarden in de tabel bestrijken (bijvoorbeeld omdat de statistieken niet zijn bijgewerkt nadat de gegevensdistributie in de tabel is gewijzigd). Als u in dit scenario een rij wilt verwijderen die overeenkomt met een sleutelwaarde die niet wordt weergegeven in het statistische histogram en Query Optimizer gebruikmaakt van de standaardkardinaliteitschatting, verloopt het verwijderen langer dan verwacht. U zult ook merken dat een indexscanbewerking wordt gebruikt om de overeenkomende rijen in de verwijzende tabel te vinden.

Status

Microsoft heeft bevestigd dat dit een probleem is bij de Microsoft-producten die worden vermeld in het gedeelte '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 optimalisatie inschakelt (via de configuratieoptie binnen het bereik van de database, de queryhint of traceringsvlag 4199).

Over cumulatieve updates voor SQL Server:

Elke nieuwe cumulatieve update voor SQL Server bevat alle hotfixes en alle beveiligingspatches die deel uitmaakten van de vorige cumulatieve update. Bekijk de meest recente cumulatieve updates voor SQL Server:

Tijdelijke oplossing

Gebruik een van de volgende methoden om dit probleem te omzeilen:

  • Oude kardinaliteitsschatting gebruiken. Zie Cardinality Estimation (SQL Server) voor meer informatie.
  • Verwijder trapsgewijs verwijderen uit de definitie van refererende sleutel en voer de verwijderbewerking uit door JOIN te gebruiken tussen bovenliggende en onderliggende tabellen om het equivalent van trapsgewijs verwijderen uit te voeren.
  • Werk de statistieken van de bovenliggende tabel bij met FULLSCAN voordat u gegevens verwijdert.

Meer informatie

Meer informatie over de terminologie die Microsoft gebruikt om software-updates te beschrijven.