Ich habe bereits mehrfach mitbekommen, dass anscheinend kaum jemand weiß, dass man Indizes auch über mehrere Spalten anlegen kann.

Zuerst sollte erwähnt werden, dass MySQL im Normalfall pro Query nur EINEN pro Tabelle Index auf einmal nutzen kann (es gibt Ausnahmen, merged-index, aber nur unter bestimmten Umständen in bestimmten Queries).

Ein Beispiel für den Einsatz eines Index über mehrere Spalten, wäre z.B. das folgende:

Eine Tabelle, in welcher Nachrichten zwischen Benutzern aufbewahrt werden, folgende Spalten sind vorhanden:

ID (int), receiverUserID(int), senderUserID(int), subject(varchar), text(text), time(int)

Wollen wir nun alle Nachrichten finden, die User 123 an User 234 geschickt hat und das Ergebnis noch nach Zeit sortieren, brauchen wir folgendes Query:

SELECT ID, subject, text, time
FROM message
WHERE receiverUserID = 234 AND senderUserID = 123
ORDER BY time ASC

Zuerst fällt auf, dass man die Nachrichten nach ID sortieren kann, was im Normalfall besser ist, als nach time, da wir davon ausgehen, dass die ID sich von Nachricht zu Nachricht um eins erhöht und die neusten somit die höchsten IDs haben.

Ohne das Wissen, dass es mehrspaltige Indizes gibt, würde man einen Index auf receiverUserID oder senderUserID legen, alternativ sogar beides, allerdings würde MySQL dann nur einen von beiden nutzen.
Also legt man einen über beide an, was bei großen Datenmengen einen extremen Geschwindigkeitsschub bringen kann.

Um die Sortierung nun auch noch über den Index zu regeln, könnten man als dritte Spalte nun noch die ID in den Index aufnehmen, was allerdings nur sinnig ist, wenn man davon ausgeht, dass das Ergebnis wirklich viele Ergebnisse erzielen wird.

2 Antworten zu “MySQL: Index über mehrere Spalten”

  1. MySQL Optimierung in 4 Schritten says:

    [...] Mehr Infos: MySQL: Index über mehrere Spalten (xfragger.de)  [...]

  2. mab says:

    Danke, genau die info habe ich gesucht.

Hinterlasse einen Kommentar.

Network-wide options by YD - Freelance Wordpress Developer