2013-08-05 7 views

Antwort

13

In MySQL sollte die Länge wirklich immer 255 oder 65.535 sein (außer 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 einem 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 hat also keinen Einfluss auf die Speicherung von irgendetwas anderem, mit Ausnahme von 1- oder 2-Byte-Längen (abhängig davon, ob das Maximum < = 255 oder> = 256 ist). (Die Länge ist eine Zweierpotenz - mit Ausnahme von 256 - hat keine Auswirkungen auf den Speicher.)

Wie für die Einstellung 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 Fließkommawert 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 den tatsächlichen Speicher auf der Seite nicht beeinflusst.

Ein weiterer Grund, warum dies keine Bedeutung hat, ist, dass der Typ varchar 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 weitaus aufwändiger als es sich lohnt.

+0

+1. Die Länge eines varchar() - Feldes sollte keinen großen Unterschied machen. –

+0

interessant ..Hast du Leads in der MySQL-Dokumentation gefunden oder ist das eine Vermutung? –

+0

eigentlich bevorzuge ich es, varchar length als x power von 2 zu wählen, es ist intuitiver für Entwickler. : / –

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, das Feld, 256 wurde besser ausgeführt.

Der Grund dafür ist wegen der Blockgröße beim Lesen der Festplatte, es stimmt überein und so liest es nicht einen Teilblock auf einmal.

+1

Haben Sie einige empirische Beweise, um diese Aussage zu unterstützen? Datenbankseiten sind normalerweise ungefähr 8192 Bytes ... UND die meisten Seiten sollten sowieso im RAM sein –

+0

@Mitch, das war vor ein paar Jahren, also müsste ich das Beispiel noch einmal aufbauen, aber ich könnte vielleicht dazu kommen Woche. –

+0

@ MitchWheat. . . Das wäre absolut korrekt, aber es hat nichts mit Potenzen von 2 zu tun. Längen von 256 sind die erste Länge, in der MySQL zwei Bytes für die Länge verwendet, anstatt 1. –

Verwandte Themen