Was ist die Obergrenze für Datensätze für die MySQL-Datenbanktabelle? Ich frage mich über das Autoincrement-Feld. Was würde passieren, wenn ich Millionen von Datensätzen hinzufüge? Wie gehe ich mit solchen Situationen um? Vielen Dank!
Was ist die Obergrenze für Datensätze für die MySQL-Datenbanktabelle? Ich frage mich über das Autoincrement-Feld. Was würde passieren, wenn ich Millionen von Datensätzen hinzufüge? Wie gehe ich mit solchen Situationen um? Vielen Dank!
Antworten:
mysql int-Typen können einige Zeilen ausführen: http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
unsigned int
größte Wert ist 4,294,967,295
unsigned bigint
größte Wert ist18,446,744,073,709,551,615
Der größte Wert einer Ganzzahl hat wenig mit der maximalen Anzahl von Zeilen zu tun, die Sie in einer Tabelle speichern können.
Wenn Sie ein int oder bigint als Primärschlüssel verwenden, können Sie zwar nur so viele Zeilen wie die Anzahl der eindeutigen Werte im Datentyp Ihres Primärschlüssels haben, aber Sie müssen Ihren Primärschlüssel nicht zu einer Ganzzahl machen , du könntest es zu einem CHAR (100) machen. Sie können den Primärschlüssel auch über mehrere Spalten deklarieren.
Neben der Anzahl der Zeilen gibt es noch andere Einschränkungen für die Tabellengröße. Beispielsweise könnten Sie ein Betriebssystem verwenden, für das die Dateigröße begrenzt ist. Oder Sie haben eine 300-GB-Festplatte, auf der nur 300 Millionen Zeilen gespeichert werden können, wenn jede Zeile 1 KB groß ist.
Die Grenzen der Datenbankgröße sind sehr hoch:
http://dev.mysql.com/doc/refman/5.1/en/source-configuration-options.html
Die MyISAM-Speicher-Engine unterstützt 2 32 Zeilen pro Tabelle. Sie können MySQL jedoch mit der --with-big-tables
Option erstellen, bis zu 2 64 Zeilen pro Tabelle zu unterstützen.
http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html
Die InnoDB-Speicher-Engine scheint die Anzahl der Zeilen nicht zu begrenzen, die Tabellengröße jedoch auf 64 Terabyte. Wie viele Zeilen dazu passen, hängt von der Größe jeder Zeile ab.
Ich schlage vor, niemals Daten zu löschen. Sagen Sie nicht, wenn die Tabellen länger als 1000 sind, schneiden Sie das Ende der Tabelle ab. Ihr Plan muss eine echte Geschäftslogik enthalten, z. B. wie lange dieser Benutzer inaktiv war. Wenn es beispielsweise länger als 1 Jahr ist, legen Sie sie in eine andere Tabelle. Dies würde wöchentlich oder monatlich in einem Wartungsskript mitten in einer langsamen Zeit geschehen.
Wenn Sie auf zu viele Zeilen in Ihrer Tabelle stoßen, sollten Sie mit dem Sharding der Tabellen oder der Partitionierung beginnen und alte Daten nach Jahr in alte Tabellen einfügen, z. B. users_2011_jan, users_2011_feb, oder Zahlen für den Monat verwenden. Ändern Sie dann Ihre Programmierung, um mit diesem Modell zu arbeiten. Erstellen Sie möglicherweise eine neue Tabelle mit weniger Informationen, um die Daten in weniger Spalten zusammenzufassen, und verweisen Sie dann nur dann auf die größeren partitionierten Tabellen, wenn Sie mehr Informationen benötigen, z. B. wenn der Benutzer sein Profil anzeigt. All dies sollte sehr sorgfältig abgewogen werden, damit es in Zukunft nicht zu teuer ist, es neu zu faktorisieren. Sie können auch nur die Benutzer, die ständig zu Ihrer Site kommen, in eine Tabelle und die Benutzer, die niemals in einen archivierten Satz von Tabellen kommen, zusammenfassen.
In InnoDB können mit einer Beschränkung der Tabellengröße von 64 Terabyte und einer Beschränkung der MySQL-Zeilengröße von 65.535 1.073.741.824 Zeilen vorhanden sein. Dies wäre eine minimale Anzahl von Datensätzen unter Verwendung der maximalen Zeilengrößenbeschränkung. Es können jedoch weitere Datensätze hinzugefügt werden, wenn die Zeilengröße kleiner ist.
Gemäß dem Abschnitt Skalierbarkeit und Einschränkungen unter http://dev.mysql.com/doc/refman/5.6/en/features.html unterstützt MySQL große Datenbanken. Sie verwenden MySQL Server mit Datenbanken, die 50 Millionen Datensätze enthalten. Einige Benutzer verwenden MySQL Server mit 200.000 Tabellen und etwa 5.000.000.000 Zeilen.
The maximum row size for a given table is determined by several factors:
Die interne Darstellung einer MySQL-Tabelle hat eine maximale Zeilengrößenbeschränkung von 65.535 Byte, selbst wenn die Speicher-Engine größere Zeilen unterstützen kann. BLOB- und TEXT-Spalten tragen nur 9 bis 12 Byte zur Zeilengrößenbeschränkung bei, da ihr Inhalt getrennt vom Rest der Zeile gespeichert wird.
Die maximale Zeilengröße für eine InnoDB-Tabelle, die für lokal auf einer Datenbankseite gespeicherte Daten gilt, beträgt etwas weniger als eine halbe Seite. Beispielsweise beträgt die maximale Zeilengröße etwas weniger als 8 KB für die standardmäßige InnoDB-Seitengröße von 16 KB, die durch die Konfigurationsoption innodb_page_size definiert wird. " Grenzen für InnoDB-Tabellen ".
Link http://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html
Zeilengrößenbeschränkungen
Die maximale Zeilengröße für eine bestimmte Tabelle wird von mehreren Faktoren bestimmt:
Die interne Darstellung einer MySQL-Tabelle hat eine maximale Zeilengrößenbeschränkung von 65.535 Byte, selbst wenn die Speicher-Engine größere Zeilen unterstützen kann. BLOB- und TEXT-Spalten tragen nur 9 bis 12 Byte zur Zeilengrößenbeschränkung bei, da ihr Inhalt getrennt vom Rest der Zeile gespeichert wird.
Die maximale Zeilengröße für eine InnoDB-Tabelle, die für lokal auf einer Datenbankseite gespeicherte Daten gilt, beträgt etwas weniger als eine halbe Seite für die Einstellungen innodb_page_size mit 4 KB, 8 KB, 16 KB und 32 KB. Beispielsweise beträgt die maximale Zeilengröße etwas weniger als 8 KB für die standardmäßige InnoDB-Seitengröße von 16 KB. Bei 64-KB-Seiten beträgt die maximale Zeilengröße etwas weniger als 16 KB. Siehe Abschnitt 15.8.8, „Grenzwerte für InnoDB-Tabellen“.
Wenn eine Zeile mit Spalten variabler Länge die maximale Zeilengröße von InnoDB überschreitet, wählt InnoDB Spalten variabler Länge für den externen Off-Page-Speicher aus, bis die Zeile innerhalb der InnoDB-Zeilengrößenbeschränkung liegt. Die Datenmenge, die lokal für Spalten variabler Länge gespeichert wird, die außerhalb der Seite gespeichert werden, unterscheidet sich je nach Zeilenformat. Weitere Informationen finden Sie in Abschnitt 15.11, „InnoDB-Zeilenspeicher und Zeilenformate“.
Unterschiedliche Speicherformate verwenden unterschiedliche Mengen an Seitenkopf- und Trailerdaten, was sich auf die für Zeilen verfügbare Speichermenge auswirkt.
Informationen zu InnoDB-Zeilenformaten finden Sie in Abschnitt 15.11, „InnoDB-Zeilenspeicher und Zeilenformate“ und Abschnitt 15.8.3, „Physikalische Zeilenstruktur von InnoDB-Tabellen“.
Informationen zu MyISAM-Speicherformaten finden Sie in Abschnitt 16.2.3, „MyISAM-Tabellenspeicherformate“.
http://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html
Es gibt keine Grenzen. Dies hängt nur von Ihrem freien Speicher und der maximalen Dateigröße des Systems ab. Dies bedeutet jedoch nicht, dass Sie keine Vorsichtsmaßnahmen treffen sollten, um die Speichernutzung in Ihrer Datenbank zu bekämpfen. Erstellen Sie immer ein Skript, mit dem nicht verwendete Zeilen gelöscht werden können oder das insgesamt keine Zeilen innerhalb einer bestimmten Zahl enthält, z. B. tausend.