Thread Tabelle mit vielen Indizes: ... lieg ich hier grundlegend falsch?
(7 answers)
Opened by jan at 2006-06-21 03:26
Folgendes Szenario: Ich habe eine Tabelle mit ca. 20 Datenspalten. drei davon sind primärwerte, die von entscheidender Bedeutung sind (ein enum, zwei ints), alle weiteren sind sekundäre Werte, die quasi nur in Kombination mit den ersten dreien relevant sind. Nun ändern sich die sekundären Werte aber relativ häufig und werden durch mehrere Scripts von Zeit zu Zeit upgedated. Dazu lege ich dann noch für die sekundären Werte (die sich leider nicht zusammenfassen lassen) jeweils eine Spalte dazu, die das Datum der letzten Ermittlung speichert, sodass ich quasi immer den als nächstes überarbeite, der am längsten nicht upgedated wurde. Das muss bei den sekundärwerten aber unabhängig voneinander geschehen, da manche Werte sich häufig ändern, andere wiederum selten, daher hatte ich dann vor, die häufigen eben öfter zu bearbeiten etc pp.
Szenario bisher: 17 Datenfelder, 17 Felder, wann das Datenfeld zuletzt bearbeitet wurde. soweit, so gut. Nun will ich jedes der Datenfelder als Suchmöglichkeit nutzen, also leg ich mir darauf 17 Indizes an. Auf die Datumsfelder lege ich auch Indizes, damit die Sortierung gleich gegeben ist und beim Auslesen derer, die am längsten nicht upgedatet wurden, alles schnell geht. Wären wir bei 34 Indizes (plus primary key..). Nun sind aber auch Suchen vorgesehen (und werden häufig durchgeführt), wo nach einem Primärwert und einer Kombination aus einem oder zwei Sekundärwerten gesucht wird. Da es einige Datensätze sind, reicht mir die Geschwindigkeit nicht, die ich so erreiche. Also lege ich wieder je einen Index, zumindest für Primärfeld1,Datenfeld1 - Primärfeld3,Datenfeld17 an. Das macht natürlich allein schon 51 Indizes. Wenn ich Primärfeld1,Datenfeld1,Datenfeld2 nehmen würde, natürlich entsprechend mehr. Mysql erlaubt in der Standard-Config maximal 65 Indizes pro Tabelle. Das hat mich stutzig gemacht, ob ich hier vielleicht einen schrecklichen Denkfehler mache - bin ja alles andere als Datenbankspezialist. Ich mein, ich habe das so verstanden, dass, wenn ich häufig eine Abfrage mit zwei Bedingungen durchführe und die Ergebnisse schnell haben will, ich dafür einen Index über diese beiden Felder anlege - ist das soweit korrekt? Kann es dann sein, dass ich in einer Tabelle 100 Indizes habe? Oder schreit allein die Zahl automatisch Wahnsinn? Wenn ich nun bspw. die Datumsfelder (also wann welcher Wert upgedated wurde) in eine andere Tabelle auslager, würde das ja schon mal helfen - allerdings würde eine Abfrage "gib mir die letzten 100 für sekundärwert A, die Primärwert B = C haben" lange dauern, da erst in der Datentabelle der index benutzt werden würde und dann beim join kein index für das Datumsfeld mehr laufen könnte, da ja nur ein Subset aller Datensätze aus der Datentabelle gewünscht ist. phpMyAdmin spuckte mir gleich Warnmeldungen ins Gesicht, als ich so anfing und meinte, ich hätte mehrere Indizes auf dem selben Feld und sollte zum Psychiater. kA, ob sie das da extra so gebaut haben oder ob phpMyAdmin nur nicht gesehen hat, dass mehrere Indizes zwar das selbe Feld beinhalten aber noch mit anderen, unterschiedlichen, Feldern kombiniert sind. Lange Rede, kurzer Sinn: lieg ich hier vollkommen Falsch oder ist das ein legitimes vorgehen und ich stoße einfach nur an die Grenzen von mysql?\n\n <!--EDIT|jan|1150846101--> |