Tun DB-Indizes nehmen die gleiche Menge an Speicherplatz als Spalten-Daten?
Wenn ich eine Spalte einer Tabelle mit Daten, und erstellen Sie einen index auf diese Spalte, wird der index nehmen die gleiche Menge an Speicherplatz als die Spalte selbst?
Ich bin interessiert, weil ich versuche zu verstehen, wenn b-Bäume tatsächlich halten Kopien der Daten in den Spalten in Blatt-Knoten oder Sie irgendwie darauf?
Sorry, wenn dies ein "Wird Java-XML ersetzen?" Art Frage stellen.
UPDATE:
erstellt eine Tabelle ohne index mit einem einzigen GUID-Spalte Hinzugefügt 1M Zeilen - 26MB
gleichen Tabelle mit einem primary key (clustered index) - 25MB (sogar weniger!), index Größe - 176KB
gleichen Tabelle mit einem eindeutigen Schlüssel (nonclustered index) - 26MB, index-Größe - 27 MB
Also nur nicht gruppierten Indizes, die nehmen so viel Platz wie die Daten selbst.
Alle Messungen wurden in SQL Server 2005
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den B-Baum Punkte auf die Zeile in der Tabelle, aber die B-Baum selbst dauert noch etwas Platz auf der Festplatte.
Einige Datenbank -, haben eine spezielle Tabelle, die Einbettung der Haupt-index und der Daten. In Oracle, es nennt sich Internet of things, IOT -- index-organisierte Tabelle.
Jede Zeile in eine reguläre Tabelle identifiziert werden kann, durch eine interne ID (aber es ist Datenbank-spezifisch), die vom B-Baum die Zeile identifizieren. In Oracle heißt
rowid
und sieht aus wieAAAAECAABAAAAgiAAA
🙂In eine einfache B-Baum, Sie haben die gleiche Anzahl von Knoten wie die Anzahl der Element in der Spalte.
Betrachten
1,2,3,4
:Den genauen Abstand kann immer noch ein bisschen anders (der index ist wahrscheinlich ein bisschen größer, als Sie benötigen zum speichern von links zwischen den Knoten, es kann nicht sein, perfekt ausbalanciert, etc.), und ich Schätze Datenbank nutzen-Optimierung zu komprimieren, Teil des index. Aber die Größenordnung zwischen dem index und der Spalte, die Daten sollten gleich sein.
Ich bin mir fast sicher, dass es durchaus eine DB-abhängig, aber im Allgemeinen – ja, Sie nehmen zusätzlichen Platz. Dies geschieht aus zwei Gründen:
Diese Weise können Sie nutzen die Tatsache
die Daten in der BTREE-Blätter sortiert;
Gewinnen Sie lookup speed-Vorteil wie
Sie haben nicht zu suchen und zurück
her zu Holen, notwendigen Dinge.
PS gerade nachgeschaut unserem mysql-server: für eine 20GB-Tabelle Indizes nehmen 10GB Speicherplatz 🙂
Beurteilung durch das Artikel, wird es in der Tat, nehmen Sie sich mindestens die gleiche Menge an Speicherplatz als die Daten in der Spalte (in PostgreSQL, sowieso).
Der Artikel geht auch darauf, eine Strategie für die Reduzierung der Datenträger-und Arbeitsspeicher-Auslastung.
Einer Weise selbst überprüfen, wäre z.B. der derby-DB, erstellen Sie eine Tabelle mit Millionen von Zeilen und einer Spalte, überprüfen Sie die Größe, erstellen Sie einen index auf der Spalte und überprüfen Sie die Größe wieder. Wenn Sie die 10-15 Minuten zu tun, also lassen Sie uns wissen, die Ergebnisse. 🙂