it-swarm.com.de

Was sind die verschiedenen Arten von Indizes, was sind die Vorteile von jedem?

Was sind die verschiedenen Arten von Indizes, was sind die Vorteile von jedem?

Ich habe von Covering und Clustered-Indizes gehört. Gibt es noch mehr? Wo würdest du sie verwenden?

31
Brian G
  • Eindeutig - Gewährleistet eindeutige Werte für die im Index enthaltene Spalte (oder Spaltengruppe)
  • Deckung - Umfasst alle Spalten, die in einer bestimmten Abfrage (oder einer Reihe von Abfragen) verwendet werden. Dadurch kann die Datenbank nur den Index verwenden und muss nicht die Tabellendaten betrachten, um die Ergebnisse abzurufen
  • Clustered - Auf diese Weise werden die tatsächlichen Daten auf der Festplatte sortiert. Wenn also eine Abfrage den Clustered-Index zum Nachschlagen der Werte verwendet, muss der zusätzliche Schritt zum Nachschlagen der tatsächlichen Tabellenzeile für Daten nicht ausgeführt werden nicht im Index enthalten.
31
Chris Shaffer

OdeToCode hat einen guten Artikel über die grundlegenden Unterschiede

Wie es im Artikel heißt:

Richtige Indizes sind für eine gute Leistung in großen Datenbanken von entscheidender Bedeutung. Manchmal können Sie eine schlecht geschriebene Abfrage mit einem guten Index nachholen, aber es kann schwierig sein, eine schlechte Indizierung auch mit den besten Abfragen nachzuholen.

Ganz richtig ... Wenn Sie gerade erst damit anfangen, würde ich mich auf Clustered- und Composite-Indizes konzentrieren, da diese wahrscheinlich am häufigsten von Ihnen verwendet werden.

7
Kevin Fairchild

Ich werde ein paar Indextypen hinzufügen

BITMAP - Wenn Sie nur sehr wenige verschiedene mögliche Werte haben, ist dies sehr schnell und nimmt nicht viel Platz ein

PARTITIONIERT - Ermöglicht die Partitionierung des Index auf der Grundlage einiger Eigenschaften, die normalerweise für sehr große Datenbankobjekte aus Speicher- oder Leistungsgründen von Vorteil sind.

FUNCTION/EXPRESSION-Indizes - werden verwendet, um einen Wert basierend auf der Tabelle vorab zu berechnen und im Index zu speichern. Ein sehr einfaches Beispiel könnte ein Index sein, der auf lower () oder einer Teilzeichenfolgenfunktion basiert.

6
mmaibaum

PostgreSQL erlaubt Teilindizes, bei denen nur Zeilen indiziert werden, die mit einem Prädikat übereinstimmen. Beispielsweise möchten Sie die Kundentabelle möglicherweise nur für die Datensätze indizieren, die aktiv sind. Das könnte ungefähr so ​​aussehen:

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

Wenn Ihr Index viele Spalten enthält und Sie viele inaktive Kunden haben, kann dies einen großen Platzgewinn bedeuten (der Index wird auf weniger Plattenseiten gespeichert) und somit die Leistung verbessern. Um den Index zu erreichen, müssen Sie mindestens das Prädikat angeben:

select name from customers where is_active is true;
5
dland

Herkömmliche Erkenntnisse legen nahe, dass die Auswahl des Index auf der Kardinalität basieren sollte. Sie werden sagen,

Verwenden Sie für eine niedrige Kardinalität Spalte wie GENDER Bitmap. Für a hohe Kardinalität wie LAST_NAME benutze b-tree.

Dies ist bei Oracle nicht der Fall , bei dem die Indexauswahl stattdessen auf der Art der Anwendung (OLTP vs. OLAP) basieren sollte. DML für Tabellen mit Bitmap-Indizes kann schwerwiegende Sperrenkonflikte verursachen. Auf der anderen Seite kann Oracle CBO mehrere Bitmap-Indizes problemlos miteinander kombinieren, und Bitmap-Indizes können zur Suche nach Nullen verwendet werden. Generell:

Verwenden Sie für ein [~ # ~] oltp [~ # ~] System mit häufigen DML- und Routine-Abfragen btree. Verwenden Sie für ein [~ # ~] olap [~ # ~] System mit seltenen DML- und Ad-hoc-Abfragen Bitmap.

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

3
jimmyorr

Verschiedene Datenbanksysteme haben unterschiedliche Namen für denselben Indextyp. Seien Sie also vorsichtig. Was beispielsweise SQL Server und Sybase als "Clustered Index" bezeichnen, wird in Oracle als "indexorganisierte Tabelle" bezeichnet.

2
skaffman

Oracle verfügt über verschiedene Kombinationen von B-Tree-, Bitmap-, partitionierten und nicht partitionierten, Reverse-Byte-, Bitmap-Join- und Domain-Indizes.

Hier ist ein Link zur 11gR1-Dokumentation zu diesem Thema: http://download.Oracle.com/docs/cd/B28359_01/server.111/b28274/data_acc.htm#PFGRF004

2
David Aldridge

Ich schlage vor, Sie suchen in den Blogs von Jason Massie ( http://statisticsio.com/ ) und Brent Ozar ( http://www.brentozar.com/ ) nach verwandten Themen die Info. Sie haben einen Beitrag über das reale Szenario, das sich mit Indizes befasst.

2
MarlonRibunal
  1. Einzigartig
  2. cluster
  3. nicht-Cluster
  4. spaltenspeicher
  5. Index mit eingeschlossener Spalte
  6. index für berechnete Spalte
  7. gefiltert
  8. räumlich
  9. xml
  10. voller Text
1
abu

Informationen zu den Indextypen und deren Bedeutung finden Sie unter: https://msdn.Microsoft.com/en-us/library/ms175049.aspx

0

SQL Server 2008 hat gefilterte Indizes , ähnlich wie PostgreSQL Teilindizes . In beiden Fällen dürfen nur Zeilen in den Index aufgenommen werden, die den angegebenen Kriterien entsprechen.

Die Syntax ist identisch mit PostgreSQL:

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