Heim > Datenbank > MySQL-Tutorial > Warum sind SQL Server 2008-Datumsausdrucksabfragen langsamer als Zeichenfolgenliteralabfragen?

Warum sind SQL Server 2008-Datumsausdrucksabfragen langsamer als Zeichenfolgenliteralabfragen?

Linda Hamilton
Freigeben: 2024-12-30 07:23:13
Original
266 Leute haben es durchsucht

Why Are SQL Server 2008 Date Expression Queries Slower Than String Literal Queries?

Datumsausdrucksabfragen: Schneller mit String-Literalen

Abfragen, die Datumsausdrücke innerhalb ihrer Bedingungen verwenden, wie im folgenden Beispiel zu sehen, sind oft langsam Leistung in SQL Server 2008:

Where FK.DT = CAST(DATEADD(m, DATEDIFF(m, 0, getdate()), 0) as DATE)  
Nach dem Login kopieren

Es wurde jedoch beobachtet, dass das Ersetzen des Datumsausdrucks durch eine Zeichenfolge Literale wie „2013-05-01“ führen zu einer deutlich schnelleren Abfrageausführung. Diese Diskrepanz hat viele Entwickler verwirrt.

Die Leistungsdisparität ist auf einen internen Fehler in SQL Server 2008 zurückzuführen, der sich auf die Art und Weise auswirkt, wie die Kardinalität der Ergebnisse bei Verwendung von Datumsausdrücken geschätzt wird. Wenn ein Datumsausdruck wie der in der Frage angezeigt wird, geht SQL Server fälschlicherweise davon aus, dass es sich um einen konstanten Wert handelt, der dem ersten Datum im angegebenen Monat entspricht. Dies führt zu ungenauen Kardinalitätsschätzungen und damit ineffizienten Abfrageplänen.

Die Verwendung eines Zeichenfolgenliterals für den Datumswert zwingt SQL Server andererseits dazu, den tatsächlichen Wert zur Laufzeit zu vergleichen und genauere Kardinalitätsschätzungen abzuleiten. Dadurch kann der Optimierer optimalere Abfragepläne generieren, was zu einer schnelleren Ausführung führt.

Um diesen Fehler zu umgehen, kann man stattdessen den folgenden alternativen Ausdruck verwenden:

Where FK.DT = cast(getdate() + 1 - datepart(day, getdate()) as date)
Nach dem Login kopieren

Dieser Ausdruck gibt eine Konstante zurück Datumswert, der den ersten Tag des aktuellen Monats darstellt und mit dem beabsichtigten Verhalten der Abfrage übereinstimmt. Mit dieser Ersetzung kann der Optimierer die Kardinalität genau schätzen und einen effizienteren Abfrageplan erstellen, wodurch die mit Datumsausdrücken verbundenen Leistungsengpässe behoben werden.

Das obige ist der detaillierte Inhalt vonWarum sind SQL Server 2008-Datumsausdrucksabfragen langsamer als Zeichenfolgenliteralabfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage