SQL VARCHAR vs. TEXT

lordg2009

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.552
Hi,

ich habe eine Datenbank in My SQL. Darin ist eine Tabelle mit ca. 1500 Zeilen (es werden stetig mehr). Mit ca. 10 Spalten. 5 dieser Spalten haben den Datentyp VARCHAR(255). In ca. 1% der Fälle reichen die 255 Zeichen nicht aus. Es lässt sich allerdings verschmerzen.

Würde ich den Datentyp in TEXT ändern, wie würde sich das auf Speicherplatz und Performance auswirken? Ich glaube TEXT erlaubt etwas über 65000 Zeichen. Würde der dazugehörige Speicher stets komplett reserviert? Würde die Performance deutlich langsamer werden? Würdet ihr mir dazu raten?

Danke für eure Hilfe
 
1500 Zeilen mit 10 Spalten? Das ist ein Witz. Was denkst du da über Optimierungen nach? Das schafft ne Raspberry im Schlaf.

Also: TEXT nehmen und fertig.
 
http://dev.mysql.com/doc/refman/5.1/de/storage-requirements.html

Char
|
Varchar
|
Text

Und nein der Speicher würde nicht komplett reserviert werden. Sprich mach doch Varchar 65000 und fertig?
Dann braucht er bis zu 255 Zeichen nur ein Byte und ab da an zwei Byte. Sprich ab 255 Zeichen kostet es ein Byte mehr. Und Daaron hat Recht, aktuell ist deine Anforderung sehr gering.

Sprich den Unterschied wirst du in absehbarer Zeit nicht merken.
 
Bei 10 Spalten relativ schmerzfrei, da kannst auch TEXT nehmen ohne Einschränkungen. Wirds mehr sollte man über eine andere Basis überlegen. Mit mehr meine ich so Tabellen mit >200 Spalten
 
Hi,

die maximal verfügbare Länge für VARCHAR-Spalten ist ab MySQL 5.0.3 begrenzt durch die maximale Zeilenlänge von 65535 Bytes (vorher max. 255 Zeichen), d. h. sie ist abhängig von der Gesamtlänge aller in der Tabellenzeile gespeicherten Daten. Bei VARCHAR-Spalten muss also die Gesamtlänge aller Spalten einer Zeile kleiner als 65535 Bytes sein.

Bei TEXT-Spalten werden die eigentlichen Textdaten hingegen nicht in der Zeile selbst, sondern separat gespeichert, sodass dieser Spaltentyp bei großen Textmengen vorzuziehen ist, da auf diese Weise die Speicherbegrenzung pro Zeile umgangen werden kann. Für TEXT-Spalten kann allerdings anders als bei VARCHAR-Spalten kein Default-Wert gesetzt werden.

Bei langen Texten ist zudem u. U. zu beachten, dass bei der Sortierung nur die ersten "max_sort_length" Zeichen berücksichtigt werden (Standardwert ist 1024). Dieser Wert kann aber zur Laufzeit mit z. B. "SET max_sort_length = 2048;" angepasst werden.

Viele Grüße

sulawyo
 
Zurück
Oben