Ingo D. Ongemuth: Indizes richtig setzen

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

  1. 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

    1. 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