Frage

Was sind die Unterschiede zwischen einem clustered und einem non-clustered index?

War es hilfreich?

Lösung

Clustered Index

  • Nur eine pro Tisch
  • schneller lesen als nicht gruppiert als Daten in Indexreihenfolge
  • physikalisch gespeichert

Non Clustered Index

  • Kann viele Male pro Tabelle verwendet werden
  • Quicker für Einsatz und Update-Operationen als ein Clustered-Index

Beiden Arten von Index werden die Leistung bei ausgewählten Daten mit Feldern verbessern, das den Index verwenden, aber Update verlangsamen und einfügen Operationen.

Aufgrund des langsameren Einsatzes und Aktualisierung von Clustered-Indizes sollte auf einem Feld gesetzt werden, die normalerweise inkrementelle dh Id oder Zeitstempel ist.

SQL Server wird in der Regel nur einen Index verwenden, wenn seine Selektivität von über 95% liegt.

Andere Tipps

Clustered-Indizes bestellt physisch die Daten auf dem Datenträger. Dies bedeutet, dass keine zusätzlichen Daten für den Index benötigt, aber es kann nur ein Clustered-Index (offensichtlich) sein. Der Zugriff auf Daten unter Verwendung eines gruppierten Index ist am schnellsten.

Alle anderen Indizes müssen nicht gruppierten sein. Ein nicht-gruppierten Index hat ein Duplikat der Daten aus den indexierten Spalten gehalten mit Zeigern auf die tatsächlichen Datenzeilen (Zeiger auf den gruppierten Index, wenn es eine gibt) bestellt zusammen. Dies bedeutet, dass die Daten durch einen nicht gruppierten Index den Zugriff durch eine zusätzliche Schicht von Dereferenzierung zu gehen hat. Allerdings, wenn Sie wählen Sie die Daten nur in den indizierten Spalten vorhanden ist können Sie die Daten wieder direkt von den duplizierten Indexdaten (deshalb ist es eine gute Idee, nur die Spalten auswählen, die Sie brauchen, und nicht verwenden *)

Clustered-Indizes sind physisch auf dem Tisch abgelegt. Das heißt, sie die am schnellsten sind, und Sie können nur einen Clustered-Index pro Tabelle haben.

Non-Clustered-Indizes werden separat gespeichert, und Sie können so viele, wie Sie wollen.

Die beste Möglichkeit ist Ihren gruppierten Index für die am häufigsten verwendeten eindeutigen Spalte zu setzen, in der Regel der PK. Sie sollten immer einen gut ausgewählten Clustered-Index in Ihren Tabellen haben, es sei denn, einen sehr zwingender Grund - können nicht von einem einzig man denken, aber hey, kann es da draußen sein -. Nicht zu tun aufkommt

Clustered Index

  1. Es kann nur ein Clustered-Index für eine Tabelle sein.
  2. In der Regel auf dem Primärschlüssel aus.
  3. Der Blattknoten eines gruppierten Index enthält die Datenseiten.

Non-Clustered Index

  1. Es kann nur 249 nicht gruppierte Indizes für eine Tabelle (bis SQL-Version 2005 spätere Versionen unterstützen bis zu 999 nicht gruppierte Indizes) sein.
  2. In der Regel auf der beliebigen Taste aus.
  3. Der Blattknoten eines nicht gruppierten Index besteht nicht aus den Datenseite. Stattdessen enthalten die Blattknoten Indexzeilen.

Clustered Index

  • Nur ein Clustered-Index in einer Tabelle da sein kann
  • die Datensätze sortieren und speichern sie physisch nach der Ordnung
  • Datenabfrage ist schneller als nicht gruppierte Indizes
  • Sie brauchen keinen zusätzlichen Platz logische Struktur speichern

Non Clustered Index

  • Es kann eine beliebige Anzahl von Nicht-Clustered-Indizes in einer Tabelle
  • Sie nicht die physische Reihenfolge beeinflussen. Erstellen Sie eine logische Reihenfolge für die Datenreihen und die Verwendung Zeiger auf physischen Datendateien
  • Daten Einführungs- / Update ist schneller als gruppierten Index
  • Verwenden Sie besonders viel Platz logische Struktur speichern

Neben diesen Unterschieden müssen Sie wissen, dass, wenn die Tabelle nicht geclusterten ist Datendateien sind ungeordnet (wenn die Tabelle keinen Clustered-Index hat) und verwendet als die Datenstruktur Heap-Datenstruktur.

Clustered bedeutet im Grunde, dass die Daten in dieser phisical Reihenfolge in der Tabelle ist. Aus diesem Grund ist man nur eine pro Tisch haben kann.

ungebündelte bedeutet, es ist „nur“ eine logische Reihenfolge.

Vorteile:

Clustered-Indizes arbeiten sehr für die Bereiche (zum Beispiel select * from my_table wo my_key zwischen @Min und @Max)

In einigen Bedingungen wird das DBMS muß keine Arbeit tun zu sortieren, wenn Sie eine orderby Anweisung verwenden.

Nachteile:

Clustered-Indizes sind, können Einsätze verlangsamen, da die physikalischen Layouts der Datensätze geändert werden müssen, als Datensätze, wenn die neuen Schlüssel setzen in sind nicht in der angegebenen Reihenfolge.

Ein Clustered-Index beschreibt tatsächlich die Reihenfolge, in der die Datensätze auf dem Datenträger physisch gespeichert sind, daher auch der Grund, warum Sie nur eine haben.

Ein Non-Clustered Index definiert eine logische Reihenfolge, die nicht die physische Ordnung auf der Festplatte entspricht.

Ein Clustered-Index ist im Wesentlichen eine sortierte Kopie der Daten in den indizierten Spalten.

Der Hauptvorteil eines Clustered-Index ist, dass, wenn Ihre Abfrage (suchen), um die Daten im Index findet dann keine zusätzliche IO benötigt wird, um diese Daten abzurufen.

Der Kopf einen gruppierten Index für die Instandhaltung, insbesondere in einer häufig aktualisierten Tabelle kann zu schlechter Leistung führen und aus diesem Grunde kann es vorteilhaft sein, einen nicht gruppierten Index zu erstellen.

Eine indizierte Datenbank hat zwei Teile: einen Satz von physischen Datensatz, die in einer beliebigen Reihenfolge, und eine Reihe von Indizes, welche die Sequenz identifizieren angeordnet sind, in der Aufzeichnung gelesen werden soll, um ein Ergebnis von einigem Kriterium sortiert zu ergeben. Wenn es keine Korrelation zwischen der physikalischen Anordnung und der Index ist, dann alle Datensätze auslesen, um erfordern viele unabhängige Einzelsatzleseoperationen zu machen. Da eine Datenbank kann in der Lage sein, Dutzende von aufeinanderfolgenden Aufzeichnungen in kürzerer Zeit zu lesen, als es dauern würde, zwei nicht aufeinander folgende Aufzeichnungen zu lesen, kann die Leistung verbessert werden, wenn Datensätze, die in dem Index in Folge sind, werden ebenfalls fortlaufend auf der Festplatte gespeichert. Die Angabe, dass ein Index der Datenbank gruppiert ist verursacht einige Mühe (verschiedene Datenbanken unterscheiden, wie viel), um die Dinge so anzuordnen, dass Gruppen von Datensätzen, die in den Index in Folge sind, werden auf der Festplatte in Folge sein.

Zum Beispiel, wenn man mit einer leeren nicht gruppierten Datenbank starten und 10.000 Datensätze in zufälliger Reihenfolge hinzufügen, würden die Aufzeichnungen wahrscheinlich am Ende in der Reihenfolge hinzugefügt werden sie hinzugefügt wurden. Auslesen der Datenbank, um die durch den Index erfordern würde 10.000 Ein-Datensatz liest. Wenn man eine gruppierte Datenbank verwenden waren, jedoch kann das System überprüfen, wenn jeder Datensatz hinzugefügt, ob der bisherige Rekord von selbst gespeichert wurde; wenn es, dass der Fall zu sein gefunden, könnte es diesen Datensatz mit dem neuen am Ende der Datenbank schreiben. Es könnte dann vor der Schlitzen auf der physischen Datensatz suchen, wo die bewegten Aufzeichnungen verwendet aufzuhalten und sehen, ob der Datensatz, der folgte, dass selbst gespeichert wurde. Wenn es zu sein, dass der Fall gefunden, es könnte diesen Rekord zu diesem Punkt bewegen. diese Art von Ansatz würde viele Datensätze verursachen zusammen, damit potenziell in Paaren gruppiert werden fast sequentielle Lesegeschwindigkeit verdoppelt wird.

In der Realität geclusterten Datenbanken verwenden komplexere Algorithmen als diese. Eine wichtige Sache zu beachten ist allerdings, dass es ein Kompromiss zwischen der Zeit, die Datenbank und die Zeit aktualisieren erforderlich erforderlich, um es der Reihe nach zu lesen. eine gruppierte Datenbank pflegen wird die Menge an Arbeit erforderlich, um hinzuzufügen, zu entfernen oder zu aktualisieren Datensätze in irgendeine Weise deutlich erhöhen, die die Sortierreihenfolge beeinflussen würde. Wenn die Datenbank sequentiell viel häufiger gelesen werden als es aktualisiert werden kann Clustering ein großer Gewinn sein. Wenn es häufig aktualisiert werden, aber selten in Folge ausgelesen, Clustering eine große Leistung Drain sein kann, vor allem, wenn die Reihenfolge, in den Elemente in die Datenbank unabhängig von ihrer Sortierreihenfolge in Bezug auf den gruppierten Index hinzugefügt werden.

// von MSDN kopiert wird, ist der zweite Punkt von nicht gruppierten Index nicht eindeutig in den anderen Antworten erwähnt.

Clustered

  • Clustered-Indizes sortieren und speichern Sie die Datenzeilen in der Tabelle oder Sicht basierend auf ihren Schlüsselwerten. Dies sind die Spalten in der mitgelieferten Indexdefinition. Es kann nur ein Clustered-Index pro Tabelle geben, weil die Datenzeilen können sich nur in einer Reihenfolge gespeichert werden.
  • Die einzige Zeit, die Datenzeilen in einer Tabelle in sortierter Reihenfolge gespeichert werden, ist wenn die Tabelle einen gruppierten Index enthält. Wenn eine Tabelle hat eine Clustered-Index, wird die Tabelle eine Clustertabelle genannt. Wenn eine Tabelle kein Clustered-Index hat, werden dessen Datenzeilen in einer ungeordneten gespeicherten Struktur bezeichnet einen Haufen.

nicht gruppiert

  • nicht gruppierte Indizes haben eine Struktur, getrennt von den Datenzeilen. EIN nicht gruppierten Index enthält die nicht gruppierten Indexschlüsselwerte und
    Jeder Schlüsselwert-Eintrag hat einen Zeiger auf die Datenreihe, die der enthält Schlüsselwert.
  • Der Zeiger aus einem Index Zeile in einem nicht gruppierten Index zu einer Datenreihe wird eine Zeile Locator genannt. Die Struktur der Reihe ist abhängig von Locator ob die Datenseiten in einem Heap oder einer gruppierten Tabelle gespeichert. Für einen Haufen, eine Reihe Locator ein Zeiger auf die Zeile. Für eine gruppierte Tabelle, die Zeile Locator ist die gruppierte Index-Taste.

Sie könnten durch Theorie Teil aus den oben genannten Stellen weg:

-Der gruppierten Index als sie Punkte direkt sehen können aufzeichnen heißt seine direkte, so dass es weniger Zeit für eine Suche dauert. Zusätzlich wird es keinen zusätzlichen Speicher / Platz nehmen, den Index zu speichern

-Während, in nicht gruppierten Index, es indirekt verweist auf den gruppierten Index, dann wird es den aktuellen Datensatz zuzugreifen, aufgrund seiner indirekten Natur wird es einige, was mehr Zeit in Anspruch nehmen, es zu access.Also braucht seine eigene Speicher / Raum, den Index zu speichern

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top