Ich habe eine Tabelle mit 20 Millionen Datensätzen in einer MySQL-Datenbank. SELECTs funktionieren sehr schnell, weil ich gute Indizes eingerichtet habe, aber INSERT- und UPDATE-Vorgänge werden sehr langsam. Die Datenbank ist das Backend einer stark belasteten Webanwendung. INSERTs und UPDATEs sind wirklich langsam, weil es etwa 5 Indizes in dieser Tabelle gibt und die Indexgröße jetzt etwa 1 GB beträgt - ich schätze, dass die Berechnung zu viel Zeit in Anspruch nimmt.
Um dieses Problem zu lösen, habe ich beschlossen, eine Tabelle zu partitionieren. Ich verwende MySQL 4 und kann nicht aktualisieren (keine direkte Kontrolle über den Server), also werde ich eine manuelle Partitionierung vornehmen - für jeden Abschnitt eine eigene Tabelle erstellen.
Der Datensatz setzt sich aus etwa 18000 verschiedenen logischen Slices zusammen, die völlig getrennt abgefragt werden können. Daher könnte ich 18000 Tabellen mit den Namen (maindata1, maindata2, etc.) erstellen. Ich bin mir jedoch nicht sicher, ob dies der optimale Weg ist? Abgesehen von der offensichtlichen Tatsache, dass ich jedes Mal, wenn ich etwas manuell tun möchte, 18000 Einträge im Verwaltungstool durchsuchen muss, mache ich mir Sorgen um die Leistung des Dateisystems. Das Dateisystem ist ext3. Ich bin mir nicht sicher, wie schnell es beim Auffinden von Dateien in einem Verzeichnis mit 36000 Dateien ist (es gibt eine Datendatei und eine Indexdatei).
Wenn dies ein Problem ist, könnte ich einige Datenabschnitte in derselben Tabelle zusammenfassen. Zum Beispiel: maindata10, maindata20, usw., wobei maindata10 die Slices 1, 2, 3...10 enthalten würde. Wenn ich mich für "Gruppen" von 10 entscheiden würde, hätte ich nur 1800 Tabellen. Wenn ich 20 gruppieren würde, hätte ich 900 Tabellen.
Ich frage mich, was die optimale Größe dieser Gruppierung wäre, d. h. die Anzahl der Dateien in einem Verzeichnis im Vergleich zur Größe der Tabelle?
Edita: Ich frage mich auch, ob es eine gute Idee wäre, mehrere separate Datenbanken zu verwenden, um Dateien zusammenzufassen. Selbst wenn ich also 18000 Tabellen hätte, könnte ich sie in, sagen wir, 30 Datenbanken mit je 600 Tabellen gruppieren. Das scheint mir sehr viel einfacher zu sein. Ich weiß nicht, ob die Verwendung mehrerer Datenbanken die Leistung oder den Speicherplatzbedarf erhöhen oder verringern würde (es würde allerdings die Sicherung und Wiederherstellung erschweren).