Sollte ich meine Datenbankfeldgrößen auf das nächste Vielfache einer Basis 2-Zahl runden?

8

Ich habe in einigen Beispieldatenbanken gesehen, dass Leute gerne Feldgrößen zu einem Vielfachen einer Basis-2-Zahl runden (z.B. varchar (32) oder varchar (64)), als ob sie ihnen eine bessere Leistung oder Raumausnutzung geben würden. Hat diese Praxis einen Vorteil? Oder sind das nur pedantische Leute?

Danke für das Schauen

    
h.coates 05.08.2013, 02:29
quelle

2 Antworten

13

In MySQL sollte die Länge immer 255 oder 65.535 sein (es sei denn, es gibt typspezifische Gründe für die Wahl einer anderen Länge). Es gibt zwei verschiedene Arten, Zeichenketten zu speichern. Bei Längen bis zu 255 wird die Länge in einem Byte statt in zwei gespeichert, wodurch ein Speicherbyte eingespart wird.

In varchar ist die Länge die maximale Länge. Die Werte werden auf der Seite basierend auf ihrer tatsächlichen Länge gespeichert. Die maximale Länge wirkt sich also nicht auf die Speicherung von irgendetwas anderem aus, mit Ausnahme von 1- oder 2-Byte-Längen (abhängig davon, ob das Maximum & lt; = 255 oder & gt; = 256 ist). (Die Länge ist eine Zweierpotenz - mit Ausnahme von 256 - hat keine Auswirkungen auf den Speicher.)

Zum Einstellen von Längen als Zweierpotenzen. Ich bin bei vielen Gelegenheiten schuldig. Es ist eine alte Gewohnheit, die darauf gerichtet ist, die Felder auf Bytegrenzen ausgerichtet zu halten. Die Idee war, Felder auf 4- oder 8-Byte-Grenzen auszurichten, da dies für die CPU optimal ist (man denke an die Programmiersprache "C"). Dies verhinderte entweder unnötigen Speicherplatz, wenn ein Integer- oder Gleitkommawert eine 4- oder 8-Byte-Ausrichtung erforderte (so dass einige Bytes verpasst wurden) oder unnötiger Overhead, um Bytes von einem nicht ausgerichteten Speicherbereich in einen ausgerichteten Speicherbereich zu kopieren. Natürlich, wie ich gerade bemerkt habe, hat diese Logik keine Grundlage für Datenbanken, da die maximale Länge nicht den tatsächlichen Speicher auf der Seite beeinflusst.

Ein weiterer Grund, warum dies keine Bedeutung hat, ist, dass der varchar -Typ tatsächlich ein oder zwei Bytes mehr als die Länge speichert. Die Datenbank kümmert sich um die Umwandlung von dem physikalischen Format auf der Seite in das physikalische Format im Speicher. Der Versuch, diesen Prozess zu "optimieren", ist viel anstrengender als es wert ist.

    
Gordon Linoff 05.08.2013, 02:38
quelle
1

Glauben Sie es oder nicht, es funktioniert. Ich habe es nicht geglaubt, bis ich es selbst verifiziert habe. Ich baute eine Datenbank mit zwei Feldern in zwei Tabellen, beide indiziert, und lud sie voll mit Daten. Ein Feld war VARCHAR (100) und das andere war VARCHAR (256).

Bei der Abfrage der Tabellen war das Feld 256 besser.

Der Grund dafür ist, dass die Blockgröße beim Lesen der Festplatte übereinstimmt und daher nicht immer einen Teilblock liest.

    
Mike Perrenoud 05.08.2013 02:33
quelle

Tags und Links