KB4577933 – FIX: Löschweitergabe bei Schlüsselwerten außerhalb der Grenzen des führenden Tabellenhistogramms führt in SQL Server 2017 und 2019 zu einem Indexscan

Gilt für
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

Symptome

Angenommen, Sie verfügen über eine Tabelle, für die eine Fremdschlüsseleinschränkung für die Löschweitergabe festgelegt ist, und die Statistiken für die Fremdschlüsselspalte decken nicht den gesamten Bereich der Schlüsselwerte in der Tabelle ab (z. B. weil Statistiken nach Änderungen der Datenverteilung in der Tabelle nicht aktualisiert wurden). Wenn Sie in diesem Szenario versuchen, eine Zeile zu löschen, die einem Schlüsselwert entspricht, der im Statistikhistogramm nicht dargestellt ist, und der Abfrageoptimierer die Standardkardinalitätsschätzung verwendet, ist der Löschvorgang langsamer als erwartet. Möglicherweise stellen Sie auch fest, dass ein Indexsuchvorgang verwendet wird, um die übereinstimmenden Zeilen in der verweisenden Tabelle zu finden.

Status

Microsoft hat bestätigt, dass dies ein Problem bei den Microsoft-Produkten ist, die im Abschnitt „Gilt für“ aufgeführt sind.

Lösung

Dieses Problem wurde in den folgenden kumulativen Updates für SQL Server behoben:

Hinweis: Dieser Fix ist nur aktiviert, wenn Sie Optimierer-Hotfixes aktivieren (entweder über die konfigurationsoption im Datenbankbereich, einen Abfragehinweis oder das Ablaufverfolgungsflag 4199).

Informationen zu kumulativen Updates für SQL Server:

Jedes neue kumulative Update für SQL Server enthält alle Hotfixes und Sicherheitsfixes, die im vorherigen kumulativen Update enthalten waren. Sehen Sie sich die neuesten kumulativen Updates für SQL Server an:

Problemumgehung

Wenden Sie eine der folgenden Methoden an, um dieses Problem zu umgehen:

  • Verwenden Sie die Schätzung der Legacykardinalität. Weitere Informationen finden Sie unter Kardinalitätsschätzung (SQL Server).
  • Entfernen Sie die Löschweitergabe aus der Fremdschlüsseldefinition, und führen Sie den Löschvorgang mithilfe von JOIN zwischen übergeordneten und untergeordneten Tabellen durch, um das Äquivalent einer Löschweitergabe zu erreichen.
  • Aktualisieren Sie die Statistiken in der übergeordneten Tabelle mit FULLSCAN, bevor Sie Daten löschen.

Referenzmaterial

Informieren Sie sich über die Terminologie, die Microsoft zum Beschreiben von Softwareupdates verwendet.