Der Begriff "sargable" wurde erstmals von P. Griffiths Selinger et al. in ihrem 1979 von ACM veröffentlichten Aufsatz "Zugriffspfadauswahl in einem relationalen Datenbankverwaltungssystem" . Für Nicht-ACM-Mitglieder gibt es eine Kopie dieses Papiers unter http://cs.stanford.edu/people/chrismre/cs345/rl/selinger.pdf
Der Begriff wird in diesem Absatz definiert:
Sowohl Index- als auch Segment- 1- Scans können optional eine Reihe von Prädikaten, sogenannte Suchargumente (oder SARGS), verwenden, die auf ein Tupel angewendet werden, bevor es an den RSI 2- Aufrufer zurückgegeben wird. Wenn das Tupel die Prädikate erfüllt, wird es zurückgegeben. Andernfalls wird der Scan fortgesetzt, bis entweder ein Tupel gefunden wird, das den SARGS-Wert erfüllt, oder das Segment oder den angegebenen Indexwertebereich erschöpft. Dies reduziert die Kosten, da der Aufwand für RSI-Aufrufe für Tupel entfällt, die innerhalb des RSS effizient abgelehnt werden können. Nicht alle Prädikate haben die Form, die zu SARGS werden kann. Ein sargierbares Prädikat ist eines der Formulare (oder kann in das Formular eingefügt werden) "Spaltenvergleichsoperatorwert". SARGs werden als boolescher Ausdruck solcher Prädikate in disjunktiver Normalform ausgedrückt.
Mit anderen Worten, ein sargables Prädikat ist so beschaffen, dass es von der Speicher-Engine (Zugriffsmethode) aufgelöst werden kann, indem die Tabelle oder der Indexsatz direkt betrachtet werden. Umgekehrt erfordert ein nicht sargierbares Prädikat eine höhere Ebene des DBMS, um Maßnahmen zu ergreifen. Zum Beispiel kann das Ergebnis von WHERE lastname = 'Doe'
durch die Speicher-Engine bestimmt werden, indem einfach der Inhalt des Feldes lastname
jedes Datensatzes betrachtet wird. WHERE UPPER(lastname) = 'DOE'
Erfordert andererseits die Ausführung einer Funktion durch die SQL-Engine. Dies bedeutet, dass die Speicher-Engine alle gelesenen Zeilen (sofern sie mit möglichen anderen, aufladbaren Prädikaten übereinstimmen) zur Auswertung an die SQL-Engine zurücksenden muss, was zusätzliche CPU-Kosten verursacht .
Aus der ursprünglichen Definition geht hervor, dass sargable Prädikate nicht nur für Index-Scans, sondern auch für Tabellen-Scans (Segment in System R-Terminologie) gelten können, sofern die Bedingungen "Spaltenvergleich-Operatorwert" erfüllt sind und daher erfüllt werden können von der Speicher-Engine ausgewertet. Dies ist in der Tat bei Db2, einem Nachkommen von System R, in vielerlei Hinsicht der Fall :
Index-sargable-Prädikate werden nicht zur Klammerung einer Suche verwendet, sondern werden aus dem Index ausgewertet, wenn einer ausgewählt wird, da die am Prädikat beteiligten Spalten Teil des Indexschlüssels sind. Diese Prädikate werden auch vom Indexmanager ausgewertet.
Data-Sargable-Prädikate sind Prädikate, die nicht vom Indexmanager, sondern von Data Management Services (DMS) ausgewertet werden können. In der Regel erfordern diese Prädikate den Zugriff auf einzelne Zeilen aus einer Basistabelle. Bei Bedarf ruft DMS die Spalten ab, die zur Auswertung des Vergleichselements erforderlich sind.
Die Tatsache, dass sargable Prädikate in SQL Server-Sprache nur solche sind, die mithilfe von Indexsuchen aufgelöst werden können, wird wahrscheinlich durch die Unfähigkeit des Speicher-Moduls bestimmt, solche Prädikate während Tabellensuchen anzuwenden.
Sargable und nicht-sargable Prädikate werden manchmal als "Stadium 1" - bzw. "Stadium 2" -Prädikate beschrieben (dies stammt auch aus der Db2-Terminologie ). Prädikate der Stufe 1 können auf der niedrigsten Ebene der Abfrageverarbeitung ausgewertet werden, während Tabellen- oder Indexdatensätze gelesen werden. Zeilen, die den Bedingungen von Stufe 1 entsprechen, werden an die nächste Stufe 2 der Bewertung gesendet.
1 - Segment in System R ist der physische Speicher der Tupel einer Tabelle; Ein Segment-Scan entspricht in etwa einem Tabellenscan in anderen DBMS.
2 - RSI - RSS 3 Interface, eine Tupel-orientierte Abfrageoberfläche. Die für diese Diskussion relevante Schnittstellenfunktion ist NEXT, die die Abfrageprädikate für die nächste Zeile zurückgibt.
3 - RSS oder Research Storage System, das Speichersubsystem von System R.