Verständnisfrage zu varchar und Speicherplatz

brainray

Mitglied
Hallo,

wie besetzt varchar eigentlich Speicherplatz: wenn ich ein Attribut x varchar(25) definiere, belegt aber nur 15 Bytes, werden ja tatsächlich nur die 15 Bytes belegt, und die restlichen 10 Bytes werden ja _nicht _ reserveirt, richtig? Das heißt, wenn ich nun ein Update auf diesem Attribut in dieser Zeile durchführe, der nun 25 Bytes aumfasst, würde die Datenbank-Engine vermutlich den original-Eintrag löschen und einen Platz im Block suchen, an den die 25 Bytes hinpassen. Entsprechend müssten danach noch der Baum bzw. die Indices reorganisiert werden.

Hätte man einen char(25) Datentyp verwendet, könnte vermutlich der selbe Speicherplatz benutzt werden.

Sehe ich das richtig?

Beste Dank
 

brainray

Mitglied
Hi,

danke für die Anregung. Leider steht es dort auch nicht ganz genau, aber ich krame bereits in einigen Büchern.

Viele Grüße

Ray
 

ice-breaker

Top Contributor
die Angabe zu char(25) stimmt, zu varchar ist das komplexer, erstmal wird an Bytes natürlich der String (1 Byte pro Zeichen bei ASCII) + 1 bzw 2 Bytes als Längenangabe wielang der String ist (2 Bytes bei length > 256).

Wie nun genau die Daten bei varchar gespeichert werden ist eine komplexere Sache, da jede Engine dies implementieren kann, wie sie möchte. Mach dir da keine zu großen Gedanken drüber, es seidenn es beeinflusst wirklich die Performance. Denn bei InnoDB ist die Speicherung relativ komplex, und noch komplexer ist sie geworden, seitdem Kompressionen unterstützt werden.
 

Ähnliche Java Themen

Neue Themen


Oben