Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Ist es effizienter, große und kleine verwandte Daten in der Spalte einer SQL-Tabelle zu trennen?

VARCHAR wird inline mit der Tabelle gespeichert. VARCHAR schneller ist, wenn die Größe angemessen ist, wobei der Kompromiss, der schneller wäre, von Ihren Daten und Ihrer Hardware abhängt, möchten Sie ein reales Szenario mit Ihren Daten vergleichen.

Die effektive maximale Anzahl von Bytes, die in einem VARCHAR gespeichert werden können oder VARBINARY Spalte unterliegt der maximalen Zeilengröße von 65,535 bytes , die von allen Spalten geteilt wird.

Zum Beispiel ein VARCHAR(255) Spalte kann eine Zeichenfolge mit einer maximalen Länge von 255 Zeichen enthalten. Angenommen, die Spalte verwendet den Zeichensatz latin1 (ein Byte pro Zeichen), ist der tatsächlich erforderliche Speicherplatz die Länge der Zeichenfolge (L) plus ein Byte zum Aufzeichnen der Länge der Zeichenfolge. Für die Zeichenfolge 'abcd' , L ist 4 und die Speicheranforderung beträgt fünf Bytes. Wenn dieselbe Spalte stattdessen für die Verwendung von ucs2 deklariert wird Double-Byte-Zeichensatz beträgt der Speicherbedarf 10 Bytes:Die Länge von 'abcd' beträgt acht Bytes und die Spalte benötigt zwei Bytes zum Speichern von Längen, da die maximale Länge größer als 255 ist (bis zu 510 bytes ).

Ziehen Sie für größere Daten die Verwendung von TEXT in Betracht oder BLOB . TEXT und BLOB Spalten sind in der NDB anders implementiert Speicher-Engine, wobei jede Zeile in einem TEXT steht Säule besteht aus zwei getrennten Teilen. Einer davon hat die feste Größe (256 bytes) , und wird tatsächlich in der ursprünglichen Tabelle gespeichert. Der andere besteht aus Daten, die 256 bytes überschreiten , die in einer verborgenen Tabelle gespeichert ist. Die Zeilen in dieser zweiten Tabelle sind immer 2,000 bytes lang. Das bedeutet, dass die Größe eines TEXT Spalte ist 256 wenn size <= 256 (wobei size die Größe der Zeile darstellt); andernfalls ist die Größe 256 + size + (2000 – (size – 256) % 2000) .

http://dev.mysql.com/doc/refman /5.6/en/storage-requirements.html

Hängt von Ihrer Datenbankbeziehung ab, wenn Sie diese Felder selten in Abfragen verwenden. Zum Beispiel für zusätzliche Informationen. Getrennte Tabelle erstellen ist eine gute Option (normalisieren).

HINWEISE: VARCHAR ist bei CHAR anders . Wenn Sie VARCHAR(250) erstellen und fügen Sie nur 20 ein Zeichen darauf, dann dauert es 5 bytes + L anders bei CHAR(250) , es dauert 250 bytes + L für gleichen Zustand.