Vinzenz Mai: MySQL: Index richtig setzen

Beitrag lesen

Hallo,

Bei einer MyISAM-MySQL-Tabelle mit ca 2 Mio Zeilen bei insgesamt 1,5GB Größe kommen hauptsächlich SELECT-Queries diese 3 Anfragen:
SELECT COUNT(*) WHERE eineID IN (1,2,3);
SELECT COUNT(*) WHERE eineID IN (1,2,3) AND andereID IN (4,5,6);
SELECT COUNT(*) WHERE eineID IN (1,2,3) AND andereID IN (4,5,6) AND einDatum>"2011-01-01";

befrage EXPLAIN nach dem Ausführungsplan.

eineID und andereID sind vom Typ INT. einDatum ist vom Typ DATE.
Auf eineID liegt der Primärschlüssel und nun ist die Frage, ob es hier sinnvoll ist, 3 verschiedene Indizes zu verwenden, wobei jeweils 1,2 oder 3 Felder (eineID,andereID,einDatum) abgedeckt werden oder jeweils 1 Index pro Feld oder etwas ganz anderes?

einzig interessante Alternative ist ein kombinierter Index in der Reihenfolge
(eineID, andereID, einDatum), siehe MySQL-Doku, weil dieser für die drei von Dir angegebenen Abfragearten genutzt werden könnte.

EXPLAIN kann Dir erläutern, ob es was gebracht hat.
Frage am Rande: sehen die Statements wirklich so aus oder darf man statt der Werteliste der IN-Klausel ein Subselect annehmen?

Freundliche Grüße

Vinzenz