Indizes richtig setzen
Ingo D. Ongemuth
- datenbank
Hallo Zusammen,
eine Frage zur Indizierung von Datenbanktabellen in MySQL:
Angenommen ich habe folgende Tabelle:
author_id, book_id, chapter_id
Der Primärschlüssel bildet sich aus allen drei Attributen. Ich habe nun Queries, die
author_id = "XXX"
abfragen, dann andere die
author_id = "XXX" AND book_id = "XXX"
und wieder andere die nur
book_id = "XXX"
usw. usf.
Sollte ich da nicht einzelne Indizes auf die jeweiligen Spalten und dann für jede Permutation dann noch einen Index aufsetzen? Oder reicht ein einziger Index, nämlich der Primärschlüssel völlig aus, weil dieser alle anderen Indizes mit einschliesst?
Bin für jede erhellende Ansicht dankbar!
Ingo
Hallo Ingo,
eine Frage zur Indizierung von Datenbanktabellen in MySQL:
Angenommen ich habe folgende Tabelle:
author_id, book_id, chapter_id
Der Primärschlüssel bildet sich aus allen drei Attributen. Ich habe nun Queries, die
die Kapitel Multi-Column Indexes und How MySQL Uses Indexes sollten Dir weiterhelfen.
author_id = "XXX"
Mehrspaltenindex kann genutzt werden.
author_id = "XXX" AND book_id = "XXX"
Mehrspaltenindex kann genutzt werden.
book_id = "XXX"
Mehrspaltenindex kann nicht genutzt werden.
Sollte ich da nicht einzelne Indizes auf die jeweiligen Spalten und dann für jede Permutation dann noch einen Index aufsetzen?
Soweit brauchst Du nicht zu gehen. Denke daran, dass Indizes Platz benötigen und Updates und Inserts aufwendiger werden.
Oder reicht ein einziger Index, nämlich der Primärschlüssel völlig aus, weil dieser alle anderen Indizes mit einschliesst?
Nein, dieser schließt nicht alle anderen Indizes mit ein.
Freundliche Grüße
Vinzenz
Hallo Vinzenz,
danke, das hilft schon sehr weiter. Dazu noch:
»» book_id = "XXX"
Mehrspaltenindex kann nicht genutzt werden.
Das bedeutet ich setze den mehrspaltigen UND einen einspaltigen Index, richtig? Ich wundere mich, warum phpmyadmin (Warnung) rummeckert, wenn ich zwei verschiedene Indexe setze, die die selbe Spalte umfassen.
Danke und Grüsse, Ingo