Frage

Was sind die verschiedenen Arten von Indizes sind, was die Vorteile der einzelnen sind?

Ich habe gehört, der Abdeckung und Clustered-Indizes werden es noch mehr? Wo würden Sie sie verwenden?

War es hilfreich?

Lösung

  • Eindeutig - Garantiert eindeutige Werte für die Spalte (oder eine Gruppe von Spalten), die in dem Index
  • Covering - Enthält alle Spalten, die in einer bestimmten Abfrage (oder Satz von Abfragen) verwendet werden, so dass die Datenbank nur den Index verwenden und nicht tatsächlich an den Tabellendaten suchen, um die Ergebnisse abrufen
  • Clustered - Auf diese Weise ist, in der die tatsächlichen Daten auf der Platte angeordnet werden, was bedeutet, wenn eine Abfrage den Clustered-Index verwendet die Werte für aufzublicken, es muss nicht den zusätzlichen Schritt nimmt die aktuelle Tabellenzeile des Nachschlagen für alle Daten nicht in den Index aufgenommen.

Andere Tipps

OdeToCode hat einen guten Artikel über die grundlegenden Unterschiede

Wie heißt es in dem Artikel:

  

Die richtige Indizes sind von entscheidender Bedeutung für eine gute   Performance in großen Datenbanken.   Manchmal kann man eine schlecht machen   schriftliche Abfrage mit einem guten Index, aber   es kann schwierig sein, für arme nachholen   Indizierung selbst mit den besten Abfragen.

Ganz stimmt auch ... Wenn Sie gerade mit ihm anfangen, ich auf gruppierten und zusammengesetzten Indizes konzentrieren würde, da sie wahrscheinlich würde sein, was Sie verwenden die meisten.

Ich werde ein paar Indextypen

hinzufügen

BITMAP - wenn Sie sehr geringe Anzahl von verschiedenen möglichen Werte haben, sehr schnell und braucht nicht viel Platz

PARTITIONED - ermöglicht es der Index in der Regel vorteilhaft für die Lagerung oder Performance-Gründe auf sehr große Datenbankobjekte basierend auf einer Eigenschaft partitioniert wird

.

FUNCTION / AUSDRUCK Indizes - verwendet, um einen Wert auf dem Tisch im Voraus zu berechnen basiert und speichern sie in dem Index, ein sehr einfaches Beispiel könnte einen Index auf der unteren () oder eine Teilfunktion basiert.

PostgreSQL erlaubt partielle Indizes, bei denen nur die Zeilen, die ein Prädikat entsprechen indiziert sind. Zum Beispiel könnten Sie die Kundentabelle zu indizieren nur für die Datensätze wollen, die aktiv sind. Dies könnte etwa so aussehen:

create index i on customers (id, name, whatever) where is_active is true;

Wenn Ihr Index viele Spalten, und Sie haben viele inaktiven Kunden, kann dies ein großer Gewinn in Bezug auf Raum und damit die Leistung (der Index wird in weniger Plattenseite gespeichert werden). Zu schlagen den Index Sie benötigen, auf ein Minimum, geben Sie das Prädikat:

select name from customers where is_active is true;

Herkömmliche Weisheit legt nahe, dass Index Wahl basierend auf Kardinalität werden soll. Sie werden sagen:

  

Für eine niedrige Kardinalität Spalte wie Geschlecht, verwenden Bitmap. Für einen hohe Mächtigkeit wie LAST_NAME mit b-Baum.

Dies ist nicht der Fall mit Oracle , wobei der Index Wahl anstelle von der Art der Anwendung (OLTP vs. OLAP) basieren sollte. DML auf Tabellen mit Bitmap-Indizes können schwere Sperrenkonflikte verursachen. Auf der anderen Seite kann die Oracle CBO leicht zu suchen nulls kombinieren können mehrere Bitmap-Indizes zusammen, und Bitmap-Indizes verwendet werden. Als allgemeine Regel gilt:

  

Für ein OLTP System mit häufigen DML und Routineanfragen, die Verwendung btree. Für ein OLAP System mit seltenen DML und Ad-hoc-Abfragen, die Verwendung Bitmap.

Ich bin mir nicht sicher, ob dies auf andere Datenbanken gilt, Kommentare sind willkommen. Die folgenden Artikel diskutieren das Thema weiter:

Verschiedene Datenbanksysteme haben verschiedene Namen für die gleiche Art von Index, so mit dieser vorsichtig sein. Zum Beispiel, was SQL Server und Sybase Aufruf "Clustered-Index" wird in Oracle genannt eine "Index-organisierten Tabelle".

Ich schlage vor, Sie den Blogs von Jason Massie suchen ( http://statisticsio.com/ ) und Brent Ozar ( http://www.brentozar.com/ ) für verwandte Informationen. Sie haben einig Post über Real-Life-Szenario, das mit Indizes beschäftigt.

Oracle hat verschiedene Kombinationen von b-Baum, Bitmap, partitioniert und nicht partitionierten, Reverse-Byte, Bitmap verbinden und Domain-Indizes.

Hier ist ein Link auf die 11gR1 Dokumentation zum Thema: http://download.oracle.com/docs/cd/B28359_01/server.111/b28274/data_acc.htm#PFGRF004

  1. Unique
  2. Cluster
  3. Nicht-Cluster
  4. Spalte speichern
  5. Index mit einbezogen Spalte
  6. Index berechnete Spalte
  7. gefiltert
  8. räumliche
  9. xml
  10. Volltext

SQL Server 2008 hat gefilterten Indizes , ähnlich Teilindizes . Beide erlauben in Index nur Zeilen bestimmte Kriterien erfüllen sind.

Die Syntax ist identisch mit PostgreSQL:

create index i on Customers(name) where is_alive = cast(1 as bit);

Um die Arten von Indizes und seiner Bedeutung Besuchen anzuzeigen: https://msdn.microsoft.com/en-us/library/ms175049.aspx

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