Nehmen wir an, Sie haben eine Mitarbeiter-Tabelle wie folgt:
%Vor%Sie hätten den primären Clusterschlüssel auf EmployeeID und möglicherweise einen nicht gruppierten Schlüssel auf (LastName, FirstName), um Mitarbeiter nach Namen zu finden.
%Vor%Wenn Sie jetzt "Joe Murphy" suchen und sein Einstellungsdatum und Gehalt abrufen müssen, wird ein Index-Suchvorgang in Ihrem Namen-basierten nicht-gruppierten Schlüssel (der gut ist) ausgeführt, aber dann, um die Einstellung abzurufen Datum und Gehalt, SQL Server muss ein so genanntes Bookmark-Lookup in die tatsächlichen Tabellendaten durchführen, um den Rekord für Joe Murphy zu erhalten. Dies wird höchstwahrscheinlich einen oder mehrere physische Festplattenzugriffe verursachen (was in Bezug auf die Leistung schlecht ist).
JEDOCH: wenn Ihr name-based non-clustered index auch "INCLUDE (HireDate, Gehalt)" angibt:
%Vor%dann SQL Server ist getan, wenn es Joe Murphy im nicht gruppierten Namensindex nachgeschlagen wird - & gt; Alle Felder, die Ihre Abfrage erfüllen sollen, befinden sich im nicht gruppierten Index. Es ist also nicht mehr erforderlich, eine datenträgeintensive Lesezeichensuche durchzuführen, und Ihre Abfragen sind möglicherweise wesentlich schneller.
Der Nachteil von INCLUDE-Spalten ist der erhöhte Speicherplatzbedarf für nicht gruppierte Indizes, da sie die enthaltenen Spalten in ihren Knoten auf Blattebene enthalten. Es ist ein Kompromiss zwischen Geschwindigkeit und Größe (wie üblich).
Marc
Wenn ein Index verwendet wird, kann er entweder zum Speicherort des vollständigen Datensatzes führen oder alle benötigten Felder können im Index selbst gespeichert werden (Sie müssen also nicht zum vollständigen Datensatz gehen). < p>
Im ersten Fall haben Sie zwei Lesevorgänge im besten Fall, einen zum Lesen des Index und einen zum Lesen des vollständigen Datensatzes.
Im zweiten Fall erhalten Sie alles, was Sie brauchen, um den Index zu lesen.
Sie können zusätzliche Spalten einschließen, die zusammen mit dem Index gespeichert werden sollen, wenn Sie mit den Feldern, aus denen der Index besteht, vollständige Abfragen durchführen können, ohne dass die zusätzliche Zeile gelesen werden muss.
Dies ist kein Problem für den CLUSTERED-Index, da das Lesen des Indexes dem Lesen der gesamten Zeile entspricht.
Besonders vorteilhaft ist es, wenn Sie in einer Sequenz mehrere Indexschlüssel lesen (zB SELECT ... FROM ... WHERE Schlüssel BETWEEN n1 AND n2), weil die Index-Lesevorgänge wahrscheinlich nebeneinander gespeichert werden und können mit vielleicht nur einem oder zwei physikalischen Sektoren gelesen werden; und den Rest der Datensätze nicht finden zu müssen, bietet mehr Hebelwirkung.
Dies speichert die Daten für die Spalte mit dem Indexknoten für den schnellen Zugriff auf Abfragen, die den Index verwenden.
Referenz :
INCLUDE (Spalte [, ... n])
Gibt die Nicht-Schlüsselspalten an zur Blattebene der hinzugefügt Nonclustered-Index. Das Nonclustered Index kann eindeutig oder nicht eindeutig sein.
Der Vorteil des Include-Index besteht darin, Größenbeschränkungen zu vermeiden.
%Vor%Obwohl Sie alle Spalten als Schlüsselspalten definieren könnten, wäre die Schlüsselgröße 334 Byte. Nur die hier verwendeten Kriterien sind Postleitzahl, Postleitzahlen in der Schlüsselspalte und Rest in Nicht-Schlüsselspalten verbessern die Leistung und auch das Speichern der Größe.
%Vor%Tags und Links sql performance