KB4051361 – Zeilenzielinformationen des Optimierers im Abfrageausführungsplan wurden in SQL Server 2014, 2016 und 2017 hinzugefügt

Gilt für
SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2017 Developer SQL Server 2017 Enterprise SQL Server 2017 Enterprise Core SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

Zusammenfassung

Fügen Sie SQL Server kumulativen Update 3 (CU3) und Microsoft SQL Server 2016 Service Pack 2 (SP2) das neue Abfrageausführungsplanattribut "EstimateRowsWithoutRowGoal" hinzu.

Wenn der Abfrageoptimierer die Kosten eines Abfrageausführungsplans schätzt, geht er in der Regel davon aus, dass alle qualifizierenden Zeilen aus allen Quellen verarbeitet werden müssen. Einige Abfragen führen jedoch dazu, dass der Abfrageoptimierer nach einem Plan sucht, der eine geringere Anzahl von Zeilen schneller zurückgibt. Dies kann auftreten, wenn die Abfrage eine TOP-Klausel , einen FAST number_rows-Abfragehinweis , eine IN - oder EXISTS-Klausel oder eine SET ROWCOUNT { number | @number\_var } -Anweisung verwendet. In diesem Fall verwendet der Optimierer beim Schätzen des Abfrageplans ein Zeilenziel. Wenn der Zeilenzielplan angewendet wird, wird die geschätzte Anzahl von Zeilen im Abfrageausführungsplan reduziert. Dies liegt daran, dass der Plan davon ausgeht, dass eine geringere Anzahl von Zeilen verarbeitet werden muss, um das Zeilenziel zu erreichen.

Hinweis Die Schätzung, die anhand des Zeilenziels vorgenommen wird, ist ungefähr. Wenn die tatsächliche Datenverteilung uneinheitlich ist, kann sie kleiner als die tatsächliche Anzahl der zu verarbeitenden Zeilen sein. Daher könnte dies zu einem ineffizienten Abfrageplan führen. Als Problemumgehung für dieses Problem können Sie die Abfrageoption USE HINT ("DISABLE_OPTIMIZER_ROWGOAL") oder das Ablaufverfolgungsflag 4138 verwenden.

Weitere Informationen finden Sie unter Update führt das USE HINT-Abfragehinweisargument in SQL Server 2016 ein. Es kann jedoch schwierig sein, in komplexen Abfragen zu erkennen, ob ein Zeilenziel angewendet wird und wie stark es die Planauswahl beeinflusst.

Mithilfe des Attributs "EstimateRowsWithoutRowGoal " können Sie die Ergebnisse mit denen des Attributs "EstimateRows " vergleichen, um zu sehen, wie stark sich das Zeilenziel auf die Schätzungen des Abfrageoptimierers auswirkt.

Hinweis Wenn das Zeilenziel nicht auf einen bestimmten Abfrageplanoperator angewendet wird, wird dieses Attribut nicht eingeschlossen.

Weitere Informationen

Dieses Update ist im folgenden kumulativen Update für SQL Server enthalten:

Kumulatives Update 3 für SQL Server 2017

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:

Neuestes kumulative Update für SQL Server 2017

Service Pack-Informationen für SQL Server

Dieses Update wird in den folgenden Service Packs für SQL Server eingeführt:

Service Pack 2 für SQL Server 2016

Service Pack 3 für SQL Server 2014

Informationen zu Service Packs für SQL Server:

Service Packs sind kumulativ. Jedes neue Service Pack enthält neben neuen Updates alle Updates früherer Service Packs. Wir empfehlen, das neueste Service Pack und das neueste kumulative Update für dieses Service Pack anzuwenden. Sie müssen also keine älteren Versionen eines Service Packs installieren, bevor Sie das neueste Service Pack installieren. In Tabelle 1 im folgenden Artikel finden Sie weitere Informationen zum neuesten Service Pack und zum neuesten kumulativen Update.

Ermitteln der Version, Edition und Updatestufe von SQL Server und seinen Komponenten

Referenzmaterial

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