Aufteilen einer großen mySql-Tabelle in kleinere - ist es das wert?

7

Ich habe ungefähr 28 Millionen Datensätze in eine mySql-Datenbank zu importieren. Der Datensatz enthält persönliche Informationen über Mitglieder in den USA und kann nach Staaten durchsucht werden.

Meine Frage ist, ist es effizienter, den Tisch in kleinere Tische aufzuteilen, anstatt alles in einem großen Tisch zu halten? Was ich im Sinn hatte, war es, sie in 50 separate Tabellen aufzuteilen, die die 50 Zustände in etwa so darstellen: members_CA, members_AZ, members_TX, etc;

So könnte ich eine Abfrage wie folgt machen:

%Vor%

Auf diese Weise muss ich mich nur mit Daten für einen bestimmten Zustand auf einmal befassen. Intuitiv macht es sehr viel Sinn, aber ich wäre neugierig auf andere Meinungen.

Vielen Dank im Voraus.

    
higgenkreuz 14.07.2011, 15:47
quelle

4 Antworten

16

Ich habe als Kommentar zunächst gepostet, werde aber jetzt als Antwort posten.

Denken Sie niemals daran, X-Tabellen basierend auf einem Attributunterschied zu erstellen. So werden die Dinge nicht gemacht.

Wenn Ihre Tabelle 28 Millionen Zeilen hat, denken Sie an Partitionierung, um sie in kleinere logische Mengen aufzuteilen.

Sie können über die Partitionierung in der MySQL-Dokumentation nachlesen.

Die andere Sache ist die Auswahl des richtigen db-Designs und die richtige Auswahl Ihrer Indizes.

Die dritte Sache wäre, dass Sie die schreckliche Idee vermeiden, $ _POST direkt in Ihrer Abfrage zu verwenden, da Sie wahrscheinlich nicht möchten, dass jemand SQL injiziert und Ihre Datenbank, Tabellen oder was auch immer löscht.

Die letzte Sache ist die Wahl der geeigneten Hardware für die Aufgabe, Sie wollen nicht, dass eine solche App auf VPS mit 500 MB RAM oder 1 GB Ram läuft.

    
Michael J.V. 14.07.2011, 15:57
quelle
2

Tun Sie das nicht . Behalte die ähnlichen Daten in 1 Tabelle selbst. Sie werden große Probleme bei der Implementierung logischer Entscheidungen und Abfragen haben, wenn die Entscheidung viele Zustände umfasst. Darüber hinaus müssen Sie, wenn Sie die Datenbankdefinition ändern müssen, z. B. Spalten hinzufügen, die gleiche Operation für alle zahlreichen (scheinbar unendlichen) Tabellen durchführen.

Verwenden Sie die Indexierung, um die Leistung zu erhöhen, aber bleiben Sie bei einer einzelnen Tabelle !!!

Sie können den Speicher-Cache auch erhöhen, um die Leistung zu erhöhen. Folgen Sie diesem Artikel.

    
Jayesh 14.07.2011 15:56
quelle
1

Wenn Sie einen Index für die Statusspalte erstellen, ist eine Auswahl für alle Elemente eines Status genauso effizient wie die Verwendung separater Tabellen. Splittimg der Tisch hat viele Nachteile. Wenn Sie Spalten hinzufügen, müssen Sie sie in 50 Tabellen hinzufügen. Wenn Sie Daten aus verschiedenen Zuständen haben wollen, müssen Sie Union-Anweisungen verwenden, die sehr hässlich und ineffizient sind. Ich empfehle dringend, an einem Tisch zu bleiben.

    
phlogratos 14.07.2011 15:55
quelle
0

Meine erste Antwort ist, dass Sie alle ähnlichen Daten zusammenhalten und als eine Tabelle aufbewahren müssen. Sie sollten in den Index auf Ihrem Tisch setzen, um die Leistung zu erhöhen, aber nicht in kleinere Tabellen aufteilen.

    
jworrin 14.07.2011 15:51
quelle

Tags und Links