Es gibt einige Konzepte und Begriffe, die beim Umgang mit Indizes unbedingt zu verstehen sind. Suchen, Scannen und Nachschlagen sind einige der Methoden, mit denen Indizes über ausgewählte Anweisungen verwendet werden. Die Selektivität von Schlüsselspalten ist ein wesentlicher Faktor für die Bestimmung, wie effektiv ein Index sein kann.
Eine Suche findet statt, wenn das SQL Server-Abfrageoptimierungsprogramm feststellt, dass Sie die angeforderten Daten am besten finden, indem Sie einen Bereich innerhalb eines Index durchsuchen. Suchvorgänge treten normalerweise auf, wenn eine Abfrage von einem Index "abgedeckt" wird. Dies bedeutet, dass die Suchprädikate im Indexschlüssel und die angezeigten Spalten entweder im Schlüssel oder im Schlüssel enthalten sind. Ein Scanvorgang findet statt, wenn das SQL Server-Abfrageoptimierungsprogramm feststellt, dass die Daten am besten gefunden werden, indem der gesamte Index durchsucht und anschließend die Ergebnisse gefiltert werden. Eine Suche wird normalerweise durchgeführt, wenn ein Index nicht alle angeforderten Spalten enthält, weder im Indexschlüssel noch in den enthaltenen Spalten. Das Abfrageoptimierungsprogramm verwendet dann entweder den gruppierten Schlüssel (gegen einen gruppierten Index) oder die RID (gegen einen Heap), um die anderen angeforderten Spalten nachzuschlagen.
Suchvorgänge sind in der Regel effizienter als Scans, da ein kleinerer Datensatz physisch abgefragt wird. Es gibt Situationen, in denen dies nicht der Fall ist, z. B. ein sehr kleiner Anfangsdatensatz, der jedoch den Rahmen Ihrer Frage sprengt.
Nun haben Sie gefragt, wie Sie die Effektivität eines Index bestimmen können, und dabei sind einige Dinge zu beachten. Die Schlüsselspalten eines Clustered-Index werden als Clustering-Schlüssel bezeichnet. Auf diese Weise werden Datensätze im Kontext eines Clustered-Index eindeutig gemacht. Alle nicht gruppierten Indizes enthalten standardmäßig den gruppierten Schlüssel, um bei Bedarf Suchvorgänge durchzuführen. Alle Indizes werden für jede DML-Anweisung in die DML-Anweisung eingefügt, auf diese aktualisiert oder daraus gelöscht. Trotzdem ist es am besten, die Leistungssteigerung in ausgewählten Anweisungen gegen die Leistungseinbußen in Einfüge-, Lösch- und Aktualisierungsanweisungen abzugleichen.
Um festzustellen, wie effektiv ein Index ist, müssen Sie die Selektivität Ihrer Indexschlüssel bestimmen. Die Selektivität kann als Prozentsatz der einzelnen Datensätze zur Gesamtzahl der Datensätze definiert werden. Wenn ich eine [person] -Tabelle mit 100 Datensätzen habe und die [first_name] -Spalte 90 verschiedene Werte enthält, können wir sagen, dass die [first_name] -Spalte zu 90% selektiv ist. Je höher die Selektivität, desto effizienter ist der Indexschlüssel. Unter Berücksichtigung der Selektivität ist es am besten, die selektivsten Spalten zuerst in den Indexschlüssel aufzunehmen. Was wäre, wenn wir in meinem vorherigen Beispiel [person] eine Spalte [last_name] hätten, die zu 95% selektiv wäre? Wir möchten einen Index mit [Nachname], [Vorname] als Indexschlüssel erstellen.
Ich weiß, dass dies eine etwas langwierige Antwort war, aber es gibt wirklich eine Menge Dinge, die bestimmen, wie effektiv ein Index sein wird, und eine Menge Dinge, mit denen Sie Leistungsgewinne abwägen müssen.