(MySQL) / Anzahl der Tabellen in einer Datenbank / Performance
Dieter
- datenbank
0 Dieter2 Vinzenz Mai
Hallo miteinander,
ich habe aktuell 38 Millionen Datensätze in einer MySQL-Datenbank zu speichern, jeder Datensatz hat 4 Felder und ca. 70 Zeichen/"bytes" insgesamt.
Nun würde mir hier, wenn ich das alles in einer Tabelle speichere, vermutlich alles abrauchen (schon bei 1 Million Datensätzen in einer Tabelle komme ich auf einem Doppel-Quadcore bei 256 MB RAM-Zuweisung pro Script bei einer einfachen "SELECT a,b,c FROM tabelle WHERE id = '123'"-Abfrage auf ca. 4-6 Sekunden Abfragedauer (Indizies gesetzt)...
Ich werde das Ganze nun also auf 380 Einzeltabellen verteilen und da kommt dann auch schon meine Frage ins Spiel:
Macht es performancemäßig einen Unterschied, ob ich nun alle 760 Tabellen in eine Datenbank lege oder z.B. 4 Datenbanken anlege und in jeder z.B. 95 Tabellen anlege? Wenn es einen Unterschied macht: Welche Variante ist schneller?
Ich brauche keine Verknüpfungen der Daten miteinander, da ich immer nur einzelne Datensätze abrufe oder verändere, also ganz einfache SELECT- und UPDATE-Kommandos.
Wäre nett, wenn mir jemand, der genaueres weiß vielleicht Erfahrungswerte posten könnte :)
Gruß, Dieter.
Macht es performancemäßig einen Unterschied, ob ich nun alle 760 Tabellen (...)
Na, da hab ich 2 verschiedene Zahlen geschrieben. Ich weiß noch nicht sicher, ob es 380 oder 760 Tabellen werden.
Hallo,
ich habe aktuell 38 Millionen Datensätze in einer MySQL-Datenbank zu speichern, jeder Datensatz hat 4 Felder und ca. 70 Zeichen/"bytes" insgesamt.
das ist kein prinzipielles Problem.
Nun würde mir hier, wenn ich das alles in einer Tabelle speichere, vermutlich alles abrauchen
Nein.
(schon bei 1 Million Datensätzen in einer Tabelle komme ich auf einem Doppel-Quadcore bei 256 MB RAM-Zuweisung pro Script bei einer einfachen "SELECT a,b,c FROM tabelle WHERE id = '123'"-Abfrage auf ca. 4-6 Sekunden Abfragedauer (Indizies gesetzt)...
dann machst Du etwas falsch. Vermutlich solltest Du die Konfiguration Deines MySQL-Servers ändern. Siehe dazu http://dev.mysql.com/doc/refman/5.0/en/option-files.html#option-files-preconfigured.
Selbst eine binäre Suche benötigte bei läppischen 38 Millionen Datensätzen (und einem UNIQUE-Index) nur 26 Suchoperationen, um einen Datensatz zu finden. 26 Suchoperationen benötigen keine Sekundenzeiten. Was sagt EXPLAIN?
Ich werde das Ganze nun also auf 380 Einzeltabellen verteilen und da kommt dann auch schon meine Frage ins Spiel:
Das ist so ziemlich die schlechteste Idee, die man in solchen Fällen haben könnte.
Freundliche Grüße
Vinzenz
moin,
Ich werde das Ganze nun also auf 380 Einzeltabellen verteilen und da kommt dann auch schon meine Frage ins Spiel:
Das ist so ziemlich die schlechteste Idee, die man in solchen Fällen haben könnte.
der bessere weg wäre partitionierung, wenn das dbms das unterstützt, kann das mysql inzwischen ?
Ilja
Hi!
der bessere weg wäre partitionierung, wenn das dbms das unterstützt, kann das mysql inzwischen ?
Es gibt seit 5.1 ein Handbuch-Kapitel über Partitioning.
Lo!