2012-07-11 14 views

Antwort

57

Ein langer VARCHAR wird auf die gleiche Weise wie ein TEXT/BLOB Feld in InnoDB gespeichert.

Von Speichern prospektive BLOB, TEXT als auch lange VARCHAR gleiche Weise von InnoDB behandelt werden. Aus diesem Grund nennt Innodb Handbuch es "lange Spalten" eher als BLOBs.

source

Wenn Sie diese Spalten zu indizieren müssen (in diesem Fall VARCHAR ist viel schneller) gibt es keinen Grund VARCHAR über TEXT für lange Felder zu verwenden - es gibt einige motorspezifische Optimierungen in MySQL abzustimmen der Datenabruf entsprechend der Länge, und Sie sollten den richtigen Spaltentyp verwenden, um diese zu nutzen.

Wenn Sie MyISAM verwenden, ist eine eingehende Diskussion über das Thema here.


TEXT und BLOB sind, um die Tabelle mit der Tabelle einen Zeiger auf den Ort des aktuellen Speicher gespeichert off gerade ist.

VARCHAR wird inline mit der Tabelle gespeichert. VARCHAR ist schneller, wenn die Größe vernünftig ist.

Nach this test, VARCHAR ist etwa dreimal so schnell wie Text.

+8

Definieren Sie "langes Feld". –

+3

@PaulBrewczynski> 768 Bytes (siehe den Link Lion gepostet) – delrox

+1

Eine Korrektur für InnoDB: TEXT und BLOB werden nur in der Tabelle in InnoDB gespeichert, wenn "long" (> 768 Bytes), und nur der Schwanz aus Tabelle (ähnlich zu VARCHAR). Der wirkliche Unterschied ist, dass die maximalen Längen sich unterscheiden, und mit VARCHAR müssen Sie eine maximale Länge angeben (erzwingt zusammen mit dem Systemlimit von 65k). – delrox

4

Text sollte für wirklich lange Strings von unbestimmter Länge verwendet werden. Außerdem sind Abfragen, die TEXT-Felder zurückgeben, viel langsamer als ihre VARCHAR-Gegenstücke.

+0

In meiner Datenbank habe ich eine Spalte namens Beschreibung. Sollte der Datentyp ein VARCHAR oder TEXT sein? Ich bin nicht sicher, wie lange die Beschreibungsdaten sein werden, aber ich plane, eine Wortzahlgrenze auf das Frontend zu setzen, so dass es maximale Länge hat. – codeinprogress

Verwandte Themen