Tom: MySQL: Index richtig setzen

Beitrag lesen

Hello,

Bin leider ziemlich unerfahren mit der Thematik und bitte daher um Tipps.
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";

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?

Es erscheint im ersten Moment sicherlich sinnvoll, auf jede der betroffenen Spalten einen eigenen Index zu setzen. Allerdings geht das dann auf Kosten des Zeitbedarfs für Einfüge- und Updateoperationen.

Da nun aber durch die Bildung des Subsets über eineID (die auf jeden fall einen Index haben sollte, geht i.d.R. auch gar nicht anders) die auszuwertende Menge bereits erheblich eingeschränkt ist, würden die weiteren Indexe vermutlich keinen Vorteil  ehr bringen.

Wenn also sichergestellt ist, dass nie Selects nur über andereID oder nur über einDatum stattfinden sollen, solltest Du die Indexe auf diese Spalten mMn weglassen zugunsten des besseren Insert-/Update-Verhaltens.

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de