Eine Frage zur SARGability


11

Ich muss nur bestätigen, dass ich etwas richtig verstehe:

Ich habe kürzlich eine SO-Frage angesehen, in der ein Benutzer eine Antwort in Linq gepostet hat:

from p in db.table where p.column.AddMinutes(1) > DateTime.Now select p

Für diejenigen, die mit Linq nicht vertraut sind, würde ich erwarten, dass das Ergebnis dieser Aussage (nicht auf Fairness geprüft) ist:

SELECT *
FROM table t
WHERE DATEADD(min, 1, t.column) >= GETDATE() 

Ich habe eine Antwort auf diese Aussage gepostet, dass die Datums- / Uhrzeitmanipulation (in diesem Fall GETDATE()) für die Variable erfolgen sollte, sodass die Anweisung tatsächlich Folgendes widerspiegeln sollte:

SELECT *
FROM table t
WHERE t.column >= DATEADD(min, -1, GETDATE())

In meiner Antwort nehmen die Teile, bei denen ich mir jetzt nicht sicher bin, Folgendes an:

  1. Indizes werden aufgrund der Manipulation der Spalte nicht verwendet
  2. Die Abfragepläne unterscheiden sich teilweise aufgrund der oben genannten (nicht getestet, vorausgesetzt, dies)
  3. Aus diesem Grund ist die erste Abfrage tatsächlich schlechter als die zweite.

Meine Frage:

Habe ich etwas in meinen Überlegungen verpasst? Hab ich recht? Hat irgendjemand gute Artikel über SARGability?

Antworten:


6
  1. richtig
  2. nicht unbedingt - es kommt darauf an, ob ein geeigneter Index existiert und ob der CBO beschließt, ihn zu verwenden. Wenn beispielsweise die Tabelle klein ist oder die Statistiken den Optimierer zu der Annahme veranlassen, dass der Filter für einen großen Prozentsatz der Ergebnisse wahr ist, werden die Kosten eines FTS möglicherweise als niedriger angesehen
  3. Dies ist nicht garantiert - es ist sogar möglich, dass die zweite Abfrage schlechter abschneidet -, aber Ihre Argumentation ist grundsätzlich fundiert. In einem Randfall, in dem ein FTS tatsächlich schneller wäre, kann der CBO stattdessen einen Index-Scan auswählen, der auf der bestmöglichen Schätzung der Kosten basiert - was natürlich immer nur eine Schätzung ist

Ein bisschen googeln tauchte diese SO-Frage und dieser interessant aussehende Artikel über SARGability auf


5

Jack hat recht, also werde ich das nicht wiederholen.

Ich werde nur einige Artikel hinzufügen, die mir in Bezug auf die Sargabilität eines Ausdrucks gefallen:

Sie sind alle großartige Autoren mit viel SQL Server-Erfahrung.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.