Was ist ein index in SQL? Können Sie das erklären oder eine Referenz angeben, um es besser zu verstehen?
Wo sollte ich einen Index verwenden?
Ein Index wird verwendet, um die Suche in der Datenbank zu beschleunigen. MySQL hat eine gute Dokumentation zu diesem Thema (die auch für andere SQL-Server relevant ist): http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
Ein Index kann verwendet werden, um effizient alle Zeilen zu finden, die mit einer Spalte in Ihrer Abfrage übereinstimmen, und dann nur diese Teilmenge der Tabelle zu durchlaufen, um genaue Übereinstimmungen zu finden. Wenn Sie keine Indizes für irgendeine Spalte in der WHERE
-Klausel haben, muss der SQL
-Server die gesamte Tabelle durchlaufen und jede Zeile auf Übereinstimmung prüfen, was bei großen Tabellen sehr langsam sein kann.
Der Index kann auch ein UNIQUE
-Index sein, was bedeutet, dass Sie keine doppelten Werte in dieser Spalte haben können, oder ein PRIMARY KEY
, der in einigen Speicher-Engines definiert, wo in der Datenbankdatei der Wert gespeichert wird.
In MySQL können Sie EXPLAIN
vor Ihrer SELECT
-Anweisung verwenden, um zu sehen, ob Ihre Abfrage von einem Index Gebrauch machen wird. Dies ist ein guter Anfang für die Fehlersuche bei Leistungsproblemen. Lesen Sie hier mehr:
http://dev.mysql.com/doc/refman/5.0/en/explain.html
Ein geclusterter Index ist wie der Inhalt eines Telefonbuchs. Sie können das Buch unter 'Hilditch, David' öffnen; öffnen und alle Informationen zu allen 'Hilditch's direkt nebeneinander finden. Hier sind die Schlüssel für den geclusterten Index (Nachname, Vorname).
Dadurch eignen sich Cluster-Indizes hervorragend zum Abrufen vieler Daten auf der Grundlage von bereichsbasierten Abfragen, da sich alle Daten nebeneinander befinden.
Da der geclusterte Index tatsächlich mit der Art und Weise zusammenhängt, wie die Daten gespeichert werden, ist nur einer davon pro Tabelle möglich (obwohl Sie schummeln können, um mehrere geclusterte Indizes zu simulieren).
Ein nicht geclusterterter Index unterscheidet sich dadurch, dass Sie viele davon haben können und diese dann auf die Daten im geclusterten Index zeigen. Sie könnten z.B. einen nicht geclusterten Index auf der Rückseite eines Telefonbuchs, der auf (Ort, Adresse)
Stellen Sie sich vor, Sie müssten das Telefonbuch nach all den Menschen durchsuchen, die in 'London' leben;
Wenn Sie einen nicht geclusterten Index auf (Stadt) haben, können diese Abfragen viel schneller durchgeführt werden.
Hoffentlich hilft das!
Eine sehr gute Analogie ist es, sich einen Datenbankindex wie einen Index in einem Buch vorzustellen. Wenn Sie ein Buch über Länder haben und nach Indien suchen, warum sollten Sie dann das ganze Buch durchblättern - was in der Datenbankterminologie einem vollständigen Tabellenscan entspricht -, wenn Sie einfach zum Index am Ende des Buches gehen können, der Ihnen die genauen Seiten nennt, auf denen Sie Informationen über Indien finden können. Ähnlich wie ein Buchindex eine Seitenzahl enthält, enthält ein Datenbankindex einen Zeiger auf die Zeile mit dem Wert, nach dem Sie in Ihrem SQL suchen.
[Mehr hier][1]
[1]: http://www.programmerinterview.com/index.php/database-sql/what-is-an-index/
Ein Index wird verwendet, um die Leistung von Abfragen zu beschleunigen. Dies geschieht, indem die Anzahl der Datenbankseiten, die besucht/gescannt werden müssen, reduziert wird.
In SQL Server bestimmt ein clustered Index die physische Reihenfolge der Daten in einer Tabelle. Es kann nur einen geclusterten Index pro Tabelle geben (der geclusterte Index IST die Tabelle). Alle anderen Indizes auf einer Tabelle werden als nicht-geclustert bezeichnet.
Bei Indizes geht es darum, Daten schnell zu finden.
Indizes in einer Datenbank sind analog zu Indizes, die Sie in einem Buch finden. Wenn ein Buch einen Index hat, und ich bitte Sie, ein Kapitel in diesem Buch zu finden, können Sie das mit Hilfe des Index schnell finden. Wenn das Buch hingegen keinen Index hat, müssen Sie mehr Zeit für die Suche nach dem Kapitel aufwenden, indem Sie sich jede Seite vom Anfang bis zum Ende des Buches ansehen.
In ähnlicher Weise können Indexe in einer Datenbank Abfragen helfen, Daten schnell zu finden. Wenn Sie mit Indizes noch nicht vertraut sind, können die folgenden Videos sehr nützlich sein. Tatsächlich habe ich eine Menge von ihnen gelernt.
[Index-Grundlagen][1]
[Geclusterte und nicht geclusterte Indizes][2]
[Index Grundlagen][2]
[Eindeutige und nicht-eindeutige Indizes][3]
[Index Grundlagen][3]
[Vor- und Nachteile von Indizes][4]
[1]: http://csharp-video-tutorials.blogspot.com/2012/09/indexes-in-sql-server-part-35.html [2]: http://csharp-video-tutorials.blogspot.co.uk/2012/09/clustered-and-non-clustered-indexes.html [3]: http://csharp-video-tutorials.blogspot.com/2012/09/unique-and-non-unique-indexes-part-37.html [4]: http://csharp-video-tutorials.blogspot.com/2012/09/advantages-and-disadvantages-of-indexes.html
Nun, im Allgemeinen ist der Index ein B-Baum
.
Es gibt zwei Arten von Indizes:
geclusterte und nicht geclusterte Indizes.
Ein geclusterterter Index erzeugt eine physische Ordnung von Zeilen (es kann nur eine sein und in den meisten Fällen ist es auch ein Primärschlüssel - wenn Sie einen Primärschlüssel auf einer Tabelle erzeugen, erzeugen Sie auch einen geclusterten Index auf dieser Tabelle).
Der Nonclustered-Index ist ebenfalls ein Binärbaum, aber er erzeugt keine physische Ordnung von Zeilen. Die Blattknoten von nonclustered index enthalten also PK (falls vorhanden) oder Zeilenindex.
Indizes werden verwendet, um die Geschwindigkeit der Suche zu erhöhen. Denn die Komplexität ist von O(log N). Indizes ist sehr groß und interessantes Thema. Ich kann sagen, dass das Erstellen von Indizes auf großen Datenbanken manchmal eine Art Kunst ist.
INDEXES
- um Daten leicht zu finden
UNIQUE INDEX
- doppelte Werte sind nicht erlaubt
Syntax für INDEX
CREATE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);
Syntax für UNIQUE INDEX
CREATE UNIQUE INDEX INDEX_NAME ON TABLE_NAME(COLUMN);
INDEX ist eine Technik zur Leistungsoptimierung, die den Datenabrufprozess beschleunigt. Es handelt sich um eine persistente Datenstruktur, die mit einer Tabelle (oder View) verknüpft ist, um die Leistung beim Abrufen der Daten aus dieser Tabelle (oder View) zu erhöhen.
Die indexbasierte Suche wird insbesondere dann angewendet, wenn Ihre Abfragen einen WHERE-Filter enthalten. Andernfalls, d.h. eine Abfrage ohne WHERE-Filter wählt die gesamten Daten aus und verarbeitet sie. Das Durchsuchen ganzer Tabellen ohne INDEX wird als Table-scan bezeichnet.
Genaue Informationen zu Sql-Indizes finden Sie auf übersichtliche und zuverlässige Weise: Folgen Sie diesen Links:
Zum Verständnis der Implementierung: http://dotnetauthorities.blogspot.in/2013/12/Microsoft-SQL-Server-Training-Online-Learning-Classes-INDEX-Creation-Deletetion-Optimizations.html
Zuerst müssen wir verstehen, wie normale (ohne Indizierung) Abfragen ablaufen. Sie durchläuft im Grunde jede Zeile nach der anderen, und wenn sie die Daten findet, kehrt sie zurück. Siehe das folgende Bild. (Dieses Bild wurde aus diesem [Video][1] entnommen).
Ohne Indizierung][2]][2] Angenommen, die Abfrage soll 50 Datensätze finden, dann muss sie 49 Datensätze als lineare Suche lesen.
Siehe das folgende Bild. (Dieses Bild wurde aus diesem [Video][1] entnommen)
Bildbeschreibung hier eingeben][3][3][3]
Wenn wir die Indizierung anwenden, wird die Abfrage die Daten schnell herausfinden, ohne jeden einzelnen Datensatz zu lesen, indem einfach die Hälfte der Daten in jedem Durchlauf wie bei einer binären Suche eliminiert wird. Die Mysql-Indizes werden als B-Baum gespeichert, wobei sich alle Daten in Blattknoten befinden.
[1]:
[2]: https://i.stack.imgur.com/ysyer.png [3]: https://i.stack.imgur.com/m1XDr.png
Wenn Sie SQL Server verwenden, ist eine der besten Ressourcen eine eigene Online-Buchreihe, die mit der Installation geliefert wird! Es ist der 1. Platz, auf den ich für JEGLICHE SQL Server-bezogenen Themen verweisen würde.
Wenn es's praktisch "wie soll ich das machen?" Art von Fragen ist, dann wäre StackOverflow ein besserer Ort, um diese Fragen zu stellen.
Außerdem bin ich schon eine Weile nicht mehr hier gewesen, aber sqlservercentral.com war früher eine der wichtigsten SQL Server-bezogenen Sites da draußen.
Ein Index wird aus verschiedenen Gründen verwendet. Der Hauptgrund ist die Beschleunigung von Abfragen, so dass Sie Zeilen schneller erhalten oder sortieren können. Ein weiterer Grund ist die Definition eines Primärschlüssel- oder Unique-Index, der garantiert, dass keine anderen Spalten dieselben Werte haben.