Heim > Datenbank > MySQL-Tutorial > Warum sind meine SQL Server 2008-Abfragen mit Datumsausdrücken so langsam?

Warum sind meine SQL Server 2008-Abfragen mit Datumsausdrücken so langsam?

DDD
Freigeben: 2024-12-28 08:44:13
Original
654 Leute haben es durchsucht

Why Are My SQL Server 2008 Queries with Date Expressions So Slow?

Abfrageoptimierung: Behebung langsamer Abfrageleistung mit Datumsausdrücken

Bei der Arbeit mit SQL Server 2008 ist es wichtig, die Auswirkungen von Datumsausdrücken zu verstehen auf die Abfrageleistung. Betrachten Sie die folgende Abfrage:

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

Diese Abfrage wird im Vergleich zu einer einfacheren Version, die ein Zeichenfolgenliteral verwendet, außergewöhnlich langsam ausgeführt:

Where FK.DT = '2013-05-01'
Nach dem Login kopieren

Ursache des Leistungsproblems

Die langsame Leistung wird durch einen Fehler im Kardinalitätsschätzer von SQL Server verursacht. Der Fehler beeinträchtigt die Genauigkeit der Schätzungen bei der Verwendung komplexer Datumsausdrücke. In diesem Fall berechnet der Ausdruck den Anfang des aktuellen Monats ('1786-06-01') und schätzt die Anzahl der übereinstimmenden Zeilen falsch ein.

Lösung

Um das Leistungsproblem zu beheben, wird empfohlen, stattdessen den folgenden Ausdruck zu verwenden:

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

Dieser Ausdruck berechnet den ersten Tag des aktuellen Monat, was genauere Kardinalitätsschätzungen liefert und die Abfrageleistung deutlich verbessert.

Darüber hinaus kann die Aktivierung des Trace-Flags 4199 den Fehler beheben und genauere Kardinalitätsschätzungen für komplexe Datumsausdrücke liefern. Es ist jedoch wichtig zu beachten, dass dies Auswirkungen auf andere Abfragen haben kann, die auf einer korrekten Kardinalitätsschätzung basieren.

Best Practices

Für eine optimale Abfrageleistung sollten Sie die Verwendung von Simpler in Betracht ziehen Verwenden Sie nach Möglichkeit Datumsausdrücke oder verwenden Sie Zeichenfolgenliterale. Bedenken Sie, dass komplexe Datumsausdrücke zu einer falsch eingeschätzten Kardinalität führen und sich auf die Abfrageoptimierung auswirken können.

Das obige ist der detaillierte Inhalt vonWarum sind meine SQL Server 2008-Abfragen mit Datumsausdrücken so langsam?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage