Grundlegendes zu SQL Server Indexing

Mit so vielen Aspekten von SQL Server zu decken und darüber zu schreiben, sind einige der grundlegenden Prinzipien oft übersehen. Es wurden mehrere Personen gewesen, die Fragen zu Indizierung zusammen mit einem allgemeinen Überblick über die Unterschiede von gruppierte und nicht gruppierte Indizes gefragt. Basierend auf der Anzahl der Fragen, die wir erhalten haben, wird diese Spitze, die Unterschiede von Indizes diskutieren und einige allgemeine Richtlinien rund um die Indizierung.







Vom einfachen Standpunkt bietet SQL Server zwei Arten von Indizes gruppierten und nicht gruppierten. In seiner einfachsten Definition ein Clustered-Index ist ein Index, der die aktuellen Daten und ein nicht gruppierten Index gespeichert ist nur ein Zeiger auf die Daten. Eine Tabelle kann nur einen Clustered-Index und bis zu 999 nicht gruppierte Indizes (abhängig von der SQL-Version). Wenn eine Tabelle keinen Clustered-Index hat es bezeichnet als einen Haufen. Also, was bedeutet das eigentlich?

Zur weiteren Klärung, lässt einen Blick darauf werfen, welche Indizes tun und warum sie wichtig sind.

1 - Tabelle ohne Indizes

Wenn die Abfrage ausgeführt wird, da es keine Indizes sind, macht SQL Server einen Table-Scan für die Tabelle, um jede Zeile zu suchen, um zu bestimmen, ob einer der Datensätze ein Nachname von „Adams“ haben. Diese Abfrage hat eine geschätzte Subtree Kosten von 0,437103. Dies sind die Kosten für SQL Server die Abfrage auszuführen. Je niedriger die Zahl, desto weniger ressourcenintensiv für SQL Server.

2- Tabelle mit nicht-gruppierten Index für Spalte Nachname

Wenn diese Abfrage ausgeführt wird, verwendet SQL Server den Index ein Index Seek zu tun, und dann braucht es eine RID Lookup zu tun, um die tatsächlichen Daten zu erhalten. Sie können von den geschätzten Kosten der Subtree 0.263888 sehen, dass dies schneller als die obige Abfrage ist.

3- Tabelle mit gruppierten Index für Spalte Nachname

Wenn diese Abfrage ausgeführt wird, SQL Server ist Sucht ein Index, und da die Indexpunkte auf die tatsächlichen Datenseiten werden die geschätzten Subtree Kosten nur 0,0044572. Dies ist bei weitem die schnellste Zugriffsmethode für diese Art der Abfrage.

4- Tabelle mit nicht-gruppierten Index für Spalte Nachname

In dieser Abfrage fordern wir nur Spalt Nachnamen. Da diese Abfrage kann nur durch den Nicht-Clustered-Index (für Abfrage) behandelt werden, SQL Server muss nicht die tatsächlichen Datenseiten zuzugreifen. Auf der Grundlage dieser Abfrage ist die geschätzte Subtree Kosten nur 0,0033766. Wie Sie dann Beispiel # 3 sehen dies noch besser können.







Um dies noch einen Schritt weiter, der nachfolgend anhand eines Ausgangs gruppierten Index für Nachnamen und keine nicht-gruppierten Index aufweist. Sie können sehen, dass die Teilstruktur Kosten sind immer noch das gleiche wie alle Spalten selbst zurückkehren, obwohl wir nur eine Spalte auswählen. So ist die Nicht-Clustered-Index eine bessere Leistung.

Für diese Abfrage haben wir jetzt zwei Indizes. Eine gruppierte und nicht gruppierte. Die Abfrage, die in den gleichen wie in Beispiel 2. Von diesem Ausgang ausgeführt wird können Sie sehen, dass der RID-Lookup hat Sucht mit einem Clustered-Index ersetzt. Insgesamt ist es die gleiche Art von Operationen, mit Ausnahme des Clustered-Index verwendet. Der Teilbaum kostet 0,264017. Das ist fast das gleiche wie in Beispiel 2.

So auf der Grundlage dieser Beispiele können Sie die Vorteile der Verwendung von Indizes sehen. Dieses Beispiel Tisch hatte nur 20.000 Zeilen von Daten, so ist dies ziemlich klein im Vergleich zu den meisten Datenbanktabellen. Sie können sich wahrscheinlich die Auswirkungen vorstellen, dies auf sehr große Tabellen haben würde.

Eine andere Sache, die Sie aus diesen Beispielen sehen kann, ist die Fähigkeit nicht gruppierten abdeckt Indizes zu verwenden, wo der Index die gesamte Ergebnismenge erfüllt. Dies ist auch dann schneller auf die Datenseiten des Heap oder gruppierten Index zu gehen.

Nächste Schritte

SQL Server verfügt über zwei Grundlagen Arten von Indizes. Sie sind gruppierte und nicht gruppierte Indizes. Es gibt einige grundlegende Unterschiede zu den beiden, die zum Verständnis Schlüssel sind, bevor Sie Index Tuning beherrschen.

Zuerst werden die Dinge, die sie gemeinsam haben.

Sowohl gruppierten und nicht gruppierten Indizes können aus mehr als einer Spalte vorgenommen werden. Die Säulen werden in dem Index in der Reihenfolge, die Sie in der CREATE INDEX-Anweisung (oder die Reihenfolge, wie sie in der Benutzeroberfläche angezeigt werden) angeben setzen. Sie werden auch in dieser Reihenfolge, wie gut sortiert. Indizes werden zunächst von der zweiten Spalte in der ersten Spalte im Index, dann alle Kopien der ersten Spalte und sortiert sortiert usw. Sie können bis zu 16 Spalten haben können als indizierte Spalten angegeben.

Weder gruppierten oder nicht gruppierten Indizes wird die Sortierreihenfolge der Daten gewährleisten, wenn es an Sie zurückgeschickt wird. Wenn die Reihenfolge der Daten ist für Sie, sollten Sie immer sortieren Sie die Daten mit der ORDER BY-Klausel in der SELECT-Anweisung.

Beide Indizes gruppierten und nicht gruppierten Indizes nehmen zusätzlichen Speicherplatz. Die Menge an Speicherplatz, die sie benötigen für die Spalten im Index ab, und die Anzahl der Zeilen in der Tabelle. Der Clustered-Index wird auch wachsen, wie Sie Spalten der Tabelle (lesen Sie, wird es später machen Sinn) hinzuzufügen.

Spalten der TEXT, NTEXT und IMAGE-Datentypen können nicht mit normalen Indizes indiziert werden. Spalten dieser Datentypen können nur mit Volltextindizes indiziert werden.

Wenn Sie Ihre Indizes online neu erstellen (ohne die Tabellensperren) und Enterprise Edition haben nicht Index TEXT, NTEXT, IMAGE, VARCHAR (MAX), NVARCHAR (MAX), VARBINARY (MAX) Datentypen wie zB Spalten mit diesen Datentypen erfordert, dass Sie den Index offline wieder aufzubauen.

Die Gesamtgröße der Schlüsselspalten nicht 900 Byte nicht überschreiten. Vergessen Sie nicht, dass die Uni-Code-Zeichen nehmen zwei Bytes pro Zeichen, die die Anzahl der Zeichen reduziert, die Ihr Index aufnehmen kann.







In Verbindung stehende Artikel