2012-05-10 8 views
9

Wenn ich weiß, dass ein Wert in MySQL gespeichert wird immer genau 32 Zeichen, ist es bessere Leistung, um den Spaltentyp CHAR statt VARCHAR zu machen? Was genau ist der Leistungsunterschied zwischen der Verwendung von VARCHAR und CHAR?MYSQL VARCHAR oder CHAR für feste Länge string

Danke.

+0

In Verbindung stehende http://stackoverflow.com/a/34802591/934739 –

Antwort

7

Ich würde CHAR verwenden.

Wenn Sie wahrscheinlich in der Spalte suchen, CHAR präsentiert eine kleine Leistungssteigerung über VARCHAR.

Da Ihre Datengröße fest ist, gibt es keinen Nachteil CHAR zu verwenden, da ein VARCHAR Äquivalent irgendwo zwischen ein und zwei Bytes als Präfix speichern wird.

Referenz: MySQL CHAR vs VARCHAR

3

VARCHAR Spalten use a one or two byte prefix to store the length:

Im Gegensatz zu CHAR werden VARCHAR-Werte als ein Byte oder zwei-Byte-Länge-Präfix plus Daten gespeichert. Das Längenpräfix gibt die Anzahl der Bytes im Wert an. Eine Spalte verwendet ein Längenbyte, wenn Werte nicht mehr als 255 Byte benötigen, zwei Längenbytes, wenn Werte mehr als 255 Byte erfordern.

So wird eine VARCHAR-Spalte sehr geringfügig größer sein. Wenn Sie wissen, dass es immer genau 32 Zeichen sein wird, dann scheint CHAR vernünftig zu sein. In so ziemlich jedem Fall, in dem Sie sich der Länge nicht ganz sicher sind, würde ich mit VARCHAR gehen.

7

Die Antwort auf Ihre erste Frage: „Ist es eine bessere Leistung den Spaltentyp CHAR statt VARCHAR zu machen“ ... ja. Bestimmt.

Wenn Sie IMMER wissen, dass die Länge 32 sein wird, dann sollten Sie definitiv CHAR verwenden.

Mehrere gute Antworten auch hier gegeben wurden: Why would I ever pick CHAR over VARCHAR in SQL?

0

Wenn die Zeichenfolge immer 32 Zeichen sein (wahrscheinlich sind Sie ein MD5-Hash mit), dann gehen für Char (32) Sie können immer dieses Skript ausführen gegen jede Tabelle und sehen, was mysql

SELECT * FROM table PROCEDURE ANALYSE(); 

einige Vorschläge Dies wird analysiert Ihre ganzen Zeilen und gibt Ihnen zu sagen hat. Funktioniert nur gut, wenn Sie eine anständige Anzahl oder Zeilen in Ihrem Tisch haben.