Was ist in einem SQL Server-Ausführungsplan der Unterschied zwischen einem Index-Scan und einem Index-Suchvorgang?
Ich bin auf SQL Server 2005.
Was ist in einem SQL Server-Ausführungsplan der Unterschied zwischen einem Index-Scan und einem Index-Suchvorgang?
Ich bin auf SQL Server 2005.
Bei einem Index-Scan liest SQL Server den gesamten Index nach Übereinstimmungen. Die dafür erforderliche Zeit ist proportional zur Größe des Index.
Bei einer Indexsuche verwendet SQL Server die B-Tree-Struktur des Index, um direkt nach übereinstimmenden Datensätzen zu suchen ( eine Vorstellung davon, wie dies funktioniert, finden Sie unter http://mattfleming.com/node/192 ). Die benötigte Zeit ist nur proportional zu die Anzahl der übereinstimmenden Datensätze.
Die Grundregel lautet: Scans sind schlecht, Suchvorgänge sind gut.
Index-Scan
Wenn SQL Server einen Scan durchführt, lädt es das Objekt, das von der Festplatte gelesen werden soll, in den Speicher und liest dieses Objekt dann von oben nach unten durch, um nach den benötigten Datensätzen zu suchen.
Index suchen
Wenn SQL Server eine Suche durchführt, weiß es, wo sich die Daten im Index befinden werden. Daher lädt es den Index von der Festplatte, wechselt direkt zu dem Teil des Index, den es benötigt, und liest dahin, wo die benötigten Daten enden . Dies ist offensichtlich eine viel effizientere Operation als ein Scan, da SQL bereits weiß, wo sich die gesuchten Daten befinden.
Wie kann ich einen Ausführungsplan so ändern, dass anstelle eines Scans ein Suchvorgang verwendet wird?
Wenn SQL Server nach Ihren Daten sucht, ist es wahrscheinlich eines der größten Probleme, dass SQL Server von einer Suche zu einem Scan wechselt, wenn einige der gesuchten Spalten nicht in dem Index enthalten sind, den Sie verwenden möchten. In den meisten Fällen greift SQL Server auf einen Clustered-Index-Scan zurück, da der Clustered-Index alle Spalten in der Tabelle enthält. Dies ist einer der Hauptgründe (zumindest meiner Meinung nach), dass wir jetzt die Möglichkeit haben, Spalten in einen Index aufzunehmen, ohne diese Spalten zu den indizierten Spalten des Index hinzuzufügen. Indem wir die zusätzlichen Spalten in den Index aufnehmen, erhöhen wir die Größe des Index, erlauben SQL Server jedoch, den Index zu lesen, ohne zum Clustered-Index oder zur Tabelle selbst zurückkehren zu müssen, um diese Werte abzurufen.
Verweise
Informationen zu den Besonderheiten jedes dieser Operatoren in einem SQL Server-Ausführungsplan finden Sie unter ....
Clustered Index Scan - Online-Bücher
Clustered Index Seek - Bücher
online
quelle
Kurze Antwort:
Index-Scan: Berühren Sie alle Zeilen außer bestimmten Spalten.
Indexsuche: Berühren Sie bestimmte Zeilen und Spalten.
quelle
Bei einem Index-Scan werden alle Zeilen im Index gescannt, um eine passende Zeile zu finden. Dies kann für kleine Tische effizient sein. Bei einer Indexsuche müssen nur die Zeilen berührt werden, die tatsächlich die Kriterien erfüllen, und daher ist sie im Allgemeinen leistungsfähiger
quelle
Ein Index-Scan wird durchgeführt, wenn die Indexdefinition nicht in einer einzelnen Zeile gefunden werden kann, um Suchprädikate zu erfüllen. In diesem Fall muss SQL Server mehrere Seiten scannen , um einen Zeilenbereich zu finden , der die Suchprädikate erfüllt.
Bei einer Indexsuche findet SQL Server mithilfe der Indexdefinition ein einzelnes Zeilenübereinstimmungs-Suchprädikat .
Indexsuchen sind besser und effektiver.
quelle
Ein Scan berührt jede Zeile in der Tabelle, auch wenn es das ist, wonach Sie suchen oder nicht
Bei einer Suche werden nur die Zeilen angezeigt, nach denen Sie suchen.
Suchanfragen sind immer besser als Scans, da sie die Art und Weise, wie Daten nachgeschlagen werden, effizienter gestalten.
Eine gute Erklärung finden Sie hier
quelle