Wie funktioniert Datenbankindizierung arbeiten?

stimmen
1k

Da indexingist so wichtig wie Ihre Daten in der Größe zunimmt eingestellt ist , kann jemand erklären , wie funktioniert die Indizierung Arbeit an einer database-agnosticEbene?

Weitere Informationen zum Abfragen Index ein Feld, überprüfen Wie kann ich Index eine Datenbankspalte .

Veröffentlicht am 04/08/2008 um 11:07
quelle vom benutzer
In anderen Sprachen...                            


10 antworten

stimmen
2k

Warum ist es notwendig?

Wenn Daten auf dem Datenträger-Speichermedien gespeichert ist, wird es als Datenblocks gespeichert. Diese Blöcke werden in ihrer Gesamtheit zugegriffen, so dass sie die Atomplattenzugriffsoperation zu machen. Plattenblöcke sind in der gleichen Weise, wie verkettete Listen strukturiert; beide enthalten einen Abschnitt für Daten, einen Zeiger auf den Ort des nächsten Knotens (oder Block), und beide müssen nicht zusammenhängend gespeichert werden.

Aufgrund der Tatsache , dass eine Reihe von Datensatz nur auf einem Feld sortiert werden kann, können wir feststellen , dass auf einem Feld zu suchen , die nicht sortiert ist eine lineare Suche erfordert , die erfordert N/2Blockzugriffe (im Durchschnitt), in dem Ndie Anzahl der Blöcke , die die Tabelle umfasst. Wenn dieses Feld ein Nicht-Schlüsselfeld (dh enthält keine eindeutige Einträge) , dann muss der gesamte Tabellen gesucht werden bei NBlock zugreift.

Während bei einem sortierten Feld kann eine binäre Suche verwendet werden, der hat log2 NBlock zugreift. Da auch die Daten , die ein Nicht-Schlüsselfeld gegeben sortiert sind, der Rest der Tabelle muss nicht für doppelte Werte gesucht werden, sobald ein höherer Wert gefunden wird. Somit ist die Leistungssteigerung erheblich.

Was ist die Indizierung?

Die Indizierung ist eine Möglichkeit, eine Anzahl von Datensätzen auf mehreren Feldern zu sortieren. in einer Tabelle, die einen Index für ein Feld zu schaffen schafft eine andere Datenstruktur, die den Feldwert und ein Zeiger auf den Datensatz bezieht sie hält. Diese Indexstruktur wird dann sortiert, so dass Binärsuchen auf sie durchgeführt werden.

Der Nachteil Indizierung ist, dass dieser Indizes auf dem Datenträger zusätzlichen Platz benötigen, da die Indizes zusammen in einer Tabelle mit dem MyISAM-Engine gespeichert sind, kann diese Datei schnell die Größe Grenzen des zugrunde liegenden Dateisystemes erreichen, wenn viele Felder innerhalb der gleichen Tabelle indiziert .

Wie funktioniert es?

Erstens, lassen Sie uns eine Beispieldatenbank Tabellenschema skizzieren;

Feldname Datentyp Größe auf Datenträger
id (Primärschlüssel) unsigned int 4 Bytes
vorName Char (50), 50 Bytes
nachName Char (50), 50 Bytes
emailaddress Char (100), 100 Bytes

Hinweis : char wurde anstelle von varchar verwendet für eine genaue Größe auf dem Datenträger Wert zu ermöglichen. Diese Beispieldatenbank enthält fünf Millionen Zeilen und ist nicht indiziert. Die Leistung von mehreren Anfragen werden nun analysiert werden. Es handelt sich um eine Abfrage mit der ID (ein sortierte Schlüsselfeld) und einem mit dem Vornamen (eine Nicht-Schlüssel unsortierten Feld).

Beispiel 1 - sortiert vs unsortiert Felder

Aufgrund unserer Beispieldatenbank von r = 5,000,000Aufzeichnungen einer festen Größe einer Satzlänge geben R = 204Bytes , und sie werden in einer Tabelle gespeichert , den MyISAM - Engine , die den Standard - Blockgröße verwendet B = 1,024Bytes. Der Sperrfaktor der Tabelle wäre bfr = (B/R) = 1024/204 = 5Datensätze pro Plattenblock. Die Gesamtzahl der Blöcke , die Tabelle zu halten , erforderlich ist , N = (r/bfr) = 5000000/5 = 1,000,000blockiert.

Eine lineare Suche auf dem ID - Feld würde durchschnittlich erfordern N/2 = 500,000Block greift auf einen Wert, da zu finden , dass das ID - Feld ist ein Schlüsselfeld. Aber da die ID - Feld auch sortiert ist, kann eine binäre Suche durchgeführt werden , erfordern einen Durchschnitt von log2 1000000 = 19.93 = 20Block zugreift. Augenblicklich können wir sehen , das eine drastische Verbesserung.

Nun ist der vorName Feld weder sortiert noch ein Schlüsselfeld ist, so kann eine binäre Suche ist unmöglich, noch sind die Werte eindeutig, und somit wird die Tabelle am Ende der Suche benötigt für einen exakten N = 1,000,000Block zuzugreift. Es ist diese Situation , dass die Indizierung korrigieren soll.

Da ein Index - Datensatz nur die indizierte Feld und einen Zeiger auf den ursprünglichen Datensatz enthält, liegt es nahe , dass er kleiner ist als der Mehrfeld - Datensatz, der es auf die Punkte. So ist der Index selbst benötigt weniger Plattenblöcke als die ursprüngliche Tabelle, die daher weniger Block erfordert durch iterieren zugreift. Das Schema für einen Index auf dem Vornamen Feld wird nachstehend beschrieben;

Feldname Datentyp Größe auf Datenträger
vorName Char (50), 50 Bytes
(Datensatzzeiger) Special 4 Bytes

Hinweis : Pointers in MySQL ist 2, 3, 4 oder 5 Bytes in der Länge auf der Größe der Tabelle abhängig.

Beispiel 2 - Indizierung

Aufgrund unserer Beispieldatenbank von r = 5,000,000Aufzeichnungen mit einem Index Satzlänge von R = 54Bytes und unter Verwendung der Standard - Blockgröße B = 1,024Bytes. Der Sperrfaktor des Index wäre bfr = (B/R) = 1024/54 = 18Datensätze pro Plattenblock. Die Gesamtzahl der Blöcke , den Index zu halten , erforderlich sind N = (r/bfr) = 5000000/18 = 277,778Blöcke.

Jetzt eine Suche , das mit Vornamen Feld kann den Index nutzt die Leistung zu erhöhen. Dies ermöglicht eine binäre Suche des Index mit einem Durchschnitt von log2 277778 = 18.08 = 19Blockzugriffe. Um die Adresse des aktuellen Datensatz zu finden, die einen weiteren Zugriff auf Blockebene erfordert zu lesen, die insgesamt zu bringen , um 19 + 1 = 20Zugriffe zu blockieren, weit entfernt von dem 1.000.000 Block - Zugriffe erforderlich , um eine finden vorName Übereinstimmung in der nicht-indizierte Tabelle.

Wann soll es genutzt werden?

(277.778 Blöcke zusätzlich aus dem obigen Beispiel einer ~ 28% ige Zunahme) Da einen Index zusätzlichen Speicherplatz erfordert die Erstellung und dass zu viele Indizes können Probleme verursachen, das sich aus den Dateisystemen Größenbeschränkungen, muss sorgfältige Überlegung verwendet werden, um die richtigen zu wählen Felder zu indizieren.

Da Indizes nur innerhalb der Datensätze, die die Suche nach einem passenden Bereich zu beschleunigen, wird verwendet, steht, dass die Indizierung Felder nur für die Ausgabe an der Vernunft wäre einfach eine Verschwendung von Speicherplatz und Verarbeitungszeit, wenn ein Insert tun oder Operation zu löschen, und damit sollte vermieden werden. Auch die Natur einer binären Suche gegeben, die Mächtigkeit oder Eindeutigkeit der Daten ist wichtig. Indizierung auf einem Feld mit einer Mächtigkeit von 2 würde die Daten in zwei Hälften geteilt, wobei eine Kardinalität von 1000 etwa 1000 Datensätze zurückkehren würde. Mit einer so niedrigen Kardinalität wird die Wirksamkeit auf eine lineare Art reduziert, und der Abfrageoptimierer wird mit dem Index vermeiden, wenn die Mächtigkeit von weniger als 30% der Rekordzahl ist, effektiv der Index macht eine Verschwendung von Speicherplatz.

Beantwortet am 04/08/2008 um 11:41
quelle vom benutzer

stimmen
168

Das erste Mal, dass ich lesen diese es war sehr hilfreich für mich. Vielen Dank.

Seitdem habe ich einen kleinen Einblick über die Kehrseite Indizes schaffen: wenn Sie in eine Tabelle schreiben ( UPDATEoder INSERT IGNORE ) mit einem Index, Sie haben tatsächlich zwei Schreiboperationen in dem Dateisystem. Ein für die Tabellendaten und ein anderer für die Indexdaten (und die Umsortierung davon (und - sofern gruppierten - die Umsortierung der Tabellendaten)). Wenn Tabellen und Indizes auf der gleichen Festplatte befinden sich das kostet mehr Zeit. So eine Tabelle ohne Index (einem Haufen), würde für eine schnellere Schreibvorgänge ermöglichen. (wenn Sie zwei Indizes hatten würden Sie mit drei Schreiboperationen beenden, und so weiter)

Doch die zwei verschiedene Standorte auf zwei verschiedene Festplatten für Indexdaten und Tabellendaten kann das Problem der erhöhten Kosten der Zeit verringern / beseitigen. Dies erfordert Definition zusätzlicher Dateigruppen mit Dateien auf den gewünschten Festplatten und Definition der Tabelle / Indexposition nach wie gewünscht.

Ein weiteres Problem bei Indizes ist die Fragmentierung im Laufe der Zeit als Daten eingesetzt ist. REORGANIZEhilft, müssen Sie Routinen schreiben Sie es getan haben.

In bestimmten Szenarien ist ein Haufen hilfreicher als eine Tabelle mit Indizes,

zB: - Wenn Sie viele rivalisierende schreibt haben aber nur eine nächtliche außerhalb der Geschäftszeiten für die Berichterstattung lesen.

Auch eine Unterscheidung zwischen gruppierten und nicht gruppierten Indizes ist ziemlich wichtig.

Half mir: - Was gruppierte und nicht gruppierte Index eigentlich bedeuten?

Beantwortet am 30/04/2013 um 15:31
quelle vom benutzer

stimmen
124

Ein Index ist nur eine Datenstruktur, die die Suche schneller für eine bestimmte Spalte in einer Datenbank macht. Diese Struktur ist in der Regel ein B-Baum oder eine Hash-Tabelle, aber es kann eine beliebige andere Logikstruktur sein.

Für weitere Informationen empfehle ich: Wie funktioniert Datenbank - Indizes? Und wie helfen Indizes?

Beantwortet am 20/02/2014 um 15:40
quelle vom benutzer

stimmen
86

Nun lassen Sie uns sagen, dass wir eine Abfrage ausgeführt werden soll, alle Einzelheiten aller Mitarbeiter zu finden, der nicht genannt werden ‚Abc‘?

SELECT * FROM Employee 
WHERE Employee_Name = 'Abc'

Was ohne Index passieren würde?

Datenbank - Software würde buchstäblich an jeder einzelnen Zeile in der Tabelle Personal, um zu sehen , ob die EMPLOYEE_NAME für diese Zeile ist ‚ABC‘. Und weil wir jede Zeile mit dem Namen ‚Abc‘ hinein wollen, können wir einfach nicht aufhören einmal suchen wir nur eine Zeile mit dem Namen ‚Abc‘ gefunden, denn es gibt andere Zeilen mit dem Namen könnte Abc . So muss jede Zeile bis zur letzten Zeile durchsucht werden - was Tausende von Zeilen in diesem Szenario bedeutet , wird von der Datenbank überprüft wird die Zeilen mit dem Namen ‚Abc‘ zu finden. Dies ist ein sogenannter Full - Table - Scan

Wie ein Datenbankindex kann die Leistung helfen

Der springende Punkt, einen Index zu haben, ist von Suchanfragen zu beschleunigen, indem im wesentlichen schneiden die Anzahl der Datensätze / Zeilen in einer Tabelle nach unten, die untersucht werden müssen. Ein Index ist eine Datenstruktur (am häufigsten ein B- Baum), die die Werte für eine bestimmte Spalte in einer Tabelle speichert.

Wie funktioniert B-Bäume Index arbeiten?

Der Grund, warum B- Bäume sind die beliebtesten Datenstruktur für Indizes auf die Tatsache zurückzuführen ist, dass sie zeiteffizient sind - weil Look-ups, Deletionen und Insertionen können alle in logarithmischer Zeit erfolgen. Und ein weiterer wichtiger Grund B- Bäume werden häufiger verwendet, da die Daten, die in dem B- Baum gespeichert ist, können sortiert werden. Die RDBMS bestimmt typischerweise, welche Datenstruktur tatsächlich für einen Index verwendet wird. Aber in einigen Szenarien mit bestimmten RDBMS, können Sie tatsächlich festlegen, welche Datenstruktur, die Sie möchten, dass Ihre Datenbank verwenden, wenn Sie den Index selbst erstellen.

Wie wird ein Hash-Tabellenindex arbeiten?

Der Grund Hash-Indizes verwendet werden, da Hash-Tabellen extrem effizient sind, wenn es darum geht, nur Werte nach oben. Also, Abfragen, die für die Gleichstellung in einen String vergleichen können Werte abrufen sehr schnell, wenn sie einen Hash-Index verwenden.

Zum Beispiel von einem Hash-Index auf der Spalte profitieren EMPLOYEE_NAME erstellt die Abfrage, die wir früher diskutiert könnte. Die Art und Weise einen Hash-Index funktionieren würde, ist, dass der Spaltenwert der Schlüssel in der Hash-Tabelle sein und die zu diesem Schlüssel zugeordneten Ist-Wert würde nur ein Zeiger auf die Zeilendaten in der Tabelle sein. Da eine Hash-Tabelle im Grunde eine assoziative Array ist, wäre ein typischer Eintrag etwas aussehen wie „ABC => 0x28939", wobei 0x28939 ein Verweis auf die Tabellenzeile ist, wo Abc im Speicher gespeichert wird. Looking up einen Wert wie „Abc“ in einem Hash-Tabellenindex und bekam einen Verweis auf die Zeile im Speicher zurück ist natürlich viel schneller als die Tabelle scannen alle Zeilen mit einem Wert von „Abc“ in der EMPLOYEE_NAME Spalte zu finden.

Die Nachteile eines Hash-Index

Hash-Tabellen sind nicht Datenstrukturen geordnet, und es gibt viele Arten von Abfragen, die Hash-Indizes kann mit nicht einmal helfen. Zum Beispiel: Angenommen, Sie alle Mitarbeiter, um herauszufinden wollen, die weniger als 40 Jahre alt. Wie könnte man das mit einem Hash-Tabellenindex tun? Nun, es ist nicht möglich, da eine Hash-Tabelle zum Nachschlagen Schlüsselwertepaare nur gut ist -, welche Abfragen bedeutet, die auf Gleichheit prüfen

Was genau ist in einem Datenbankindex? So, jetzt wissen Sie , dass eine Datenbank Index auf einer Spalte in einer Tabelle erstellt wird, und dass der Index speichert die Werte in dieser bestimmten Spalte. Aber es ist wichtig zu verstehen , dass ein Datenbankindex nicht speichert die Werte in den anderen Spalten der gleichen Tabelle. Zum Beispiel, wenn wir einen Index für die EMPLOYEE_NAME Spalte zu erstellen, bedeutet dies , dass die Employee_Age und Employee_Address Spaltenwerte werden nicht auch im Index gespeichert. Wenn wir nur alle haben speichern Sie die anderen Spalten in dem Index, dann wäre es nur wie eine weitere Kopie der gesamten Tabelle erstellen - was viel zu viel Platz in Anspruch nehmen würde und sehr ineffizient sein.

Wie weiß eine Datenbank , wenn Sie einen Index benutzen? Wenn eine Abfrage wie „SELECT * FROM Mitarbeiter WHERE EMPLOYEE_NAME =‚Abc‘“ ausgeführt wird, wird die Datenbank überprüfen , ob es ein Index für die Spalte ist (s) abgefragt werden. Die EMPLOYEE_NAME Spalte Unter der Annahme einen Indexes für sich geschaffen hat, wird die Datenbank , um zu entscheiden, ob es tatsächlich Sinn macht , den Index zu verwenden , die Werte zu finden , durchsucht werden - denn es gibt einige Szenarien , wo es tatsächlich weniger effizient ist , um den Datenbankindex zu verwenden , und effizienter nur die gesamte Tabelle zu scannen.

Was kostet eine Datenbank Index von?

Es nimmt Platz - und den größeren Tisch, desto größer Ihren Index. Eine weitere Performance-Einbußen mit Indizes ist die Tatsache, dass, wenn Sie hinzufügen, löschen oder Aktualisieren von Zeilen in der entsprechenden Tabelle, die gleichen Operationen an Ihren Index getan werden muss. Denken Sie daran, dass ein Index das gleiche bis auf die Minute Daten enthalten muss, wie, was ist in der Tabellenspalte (n), dass der Index abdeckt.

Als allgemeine Regel gilt, dass ein Index nur auf einer Tabelle erstellt werden, wenn die Daten in der indizierten Spalte häufig abgefragt werden.

Siehe auch

  1. Welche Spalten machen im Allgemeinen guten Indizes?
  2. Wie kann Datenbankindizes arbeiten
Beantwortet am 13/08/2016 um 18:36
quelle vom benutzer

stimmen
64

Klassisches Beispiel „Index in Büchern“

Betrachten wir ein „Buch“ von 1000 Seiten, geteilt durch 100 Abschnitte, wobei jeder Abschnitt mit X-Seiten.

Einfach, nicht wahr?

Nun, ohne eine Indexseite, einen bestimmten Abschnitt zu finden, die mit dem Buchstaben „S“ beginnt, haben Sie keine andere Wahl, als das Scannen durch das gesamte Buch. dh: 1000 Seiten

Aber mit einer Indexseite am Anfang, sind Sie da. Und mehr, einen bestimmten Abschnitt zu lesen, was zählt, die Sie gerade über die Index-Seite aussehen müssen, immer wieder, jedes Mal. Nach dem Matching-Index zu finden, können Sie effizient durch Überspringen andere Abschnitte mit dem Abschnitt springen.

Aber dann, zusätzlich zu 1000 Seiten finden Sie weitere ~ 10 Seiten müssen die Indexseite angezeigt werden, so total 1010 Seiten.

Somit ist der Index ein separater Abschnitt, der für einen effizienten-Lookups Werte der indizierten Spalte + Zeiger auf die indexierte Zeile in einer sortierten Reihenfolge speichert.

Die Dinge sind in den Schulen einfach, ist es nicht? : P

Beantwortet am 23/04/2017 um 14:43
quelle vom benutzer

stimmen
40

Einfache Beschreibung !!!!!!!!!!

Der Index ist nichts anderes als eine Datenstruktur, die die Werte für eine bestimmte Spalte in einer Tabelle gespeichert werden. Ein Index wird auf eine Spalte einer Tabelle erstellt.

Beispiel haben wir eine Datenbanktabelle Benutzer mit drei Spalten genannt - Name, Alter und Adresse. Es sei angenommen, dass die Benutzertabelle Tausende von Zeilen.

Nun lassen Sie uns sagen, dass wir eine Abfrage ausgeführt werden soll, alle Einzelheiten aller Benutzer zu finden, der nicht genannt werden ‚John‘. Wenn wir die folgende Abfrage.

SELECT * FROM User 
WHERE Name = 'John'

Die Datenbank - Software würde buchstäblich an jeder einzelnen Zeile in der Benutzertabelle suchen , wenn der Name für diese Zeile zu sehen ist ‚John‘. Dies wird eine lange Zeit in Anspruch nehmen.
Dies ist , wo Index hilft uns „Index verwendet wird Abfragen zu beschleunigen Suche im Wesentlichen durch die Anzahl der Datensätze / Zeilen in einer Tabelle Abholzen , die geprüft werden muss“.
Wie man einen Index erstellen

CREATE INDEX name_index
ON User (Name)

Ein Index besteht aus Spaltenwert (zB: John) aus einer Tabelle, und dass diese Werte werden in einer Datenstruktur gespeichert.
So , jetzt wird die Datenbank , den Index verwenden , um Mitarbeiter namens John zu finden , da der Index vermutlich alphabetisch Name des Benutzers sortiert werden. Und weil es sortiert wird, bedeutet dies für einen Namen suchen ist viel schneller , da alle Namen mit einem „J“ beginnen werden im Index zueinander gleich neben sein!

Beantwortet am 02/08/2016 um 01:30
quelle vom benutzer

stimmen
18

Nur eine schnelle Anregung .. Als Indexierungskosten Sie zusätzliche Schreib- und Speicherplatz, so dass, wenn Ihre Anwendung mehr insert / update Operation erfordert, können Sie Tabellen ohne Indizes verwenden, aber wenn es mehr Datenabruf-Operationen erfordert, können Sie für indizierte gehen sollte Tabelle.

Beantwortet am 14/01/2015 um 06:44
quelle vom benutzer

stimmen
14

Man denke nur an Datenbank-Index als Index eines Buches. Wenn Sie ein Buch über Hunde und Sie wollen eine Information zu finden, zu sagen wir mal, Deutsche Schäferhunde, man könnte natürlich alle Seiten des Buches blättern und finden, was Sie suchen, aber das ist natürlich zeitaufwendig und nicht sehr schnell. Eine weitere Möglichkeit ist, dass Sie nur auf den Index Abschnitt des Buchs gehen und dann das finden, was Sie suchen, indem Sie den Namen des Unternehmens, mit der Sie suchen (in diesem Fall, Deutsche Schäferhunde) und auch auf der Suche an der Seitennummer schnell finden, was Sie suchen. In Datenbank wird die Seitennummer bezeichnet als einen Zeiger, der die Datenbank an die Adresse auf der Platte leitet, wo Einheit befindet. Unter Verwendung des gleichen Schäferhund Analogie, könnten wir so etwas wie dieses ( „Schäferhund“ haben,

Kurz gesagt, ist ein Index, eine Datenstruktur, die die Werte für eine bestimmte Spalte in einer Tabelle speichert, um Abfrage Suche zu beschleunigen.

Beantwortet am 21/12/2016 um 17:16
quelle vom benutzer

stimmen
7

SQL-Index ist etwas im Zusammenhang die Suche in der SQL-Datenbank Speedup. Index ermöglicht Programmierer sehr schnell Daten aus der Datenbank abgerufen werden. Angenommen, Sie sind Student oder einige Book-Reader. Ihr Buch enthält 50.000 Seiten. Erster Tag Sie einige Thema „ABC“ am nächsten Tag lesen wollen etwas anderes Thema „xyz“ lesen. Sie werden nie durch Seite für Seite gehen manuell. Was Sie in dieser Situation zu tun ist Buch-Index zu verwenden, um das etwas bestimmtes Thema zu suchen und dann zu Ihrem Thema Springt direkt. Index gespeichert Ihre viel Zeit Thema zu suchen. Gleiche in SQL-Index ermöglicht Index aus der Datenbank sehr schnell Millionen von Datensätzen zu suchen.

Beantwortet am 15/02/2018 um 10:17
quelle vom benutzer

stimmen
2

Ein Datenbankindex ist eine Datenstruktur, die die Geschwindigkeit der Datenabrufoperationen auf einer Datenbanktabelle auf Kosten des zusätzlichen Schreib- und Stauraumes zur Aufrechterhaltung der Index-Datenstruktur verbessert. Indizes werden verwendet, um Daten schnell zu finden, ohne jedes Mal eine Datenbanktabelle zugegriffen wird jede Zeile in einer Datenbanktabelle suchen zu müssen. Indizes können mit einer oder mehreren Spalten einer Datenbanktabelle erstellt werden, die Grundlage für die Aufzeichnungen sowohl eine schnelle zufällige Lookups und effizienten Zugang von bestellten.

Beantwortet am 09/07/2018 um 05:33
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more