2009-07-09 10 views
3

Wenn ich Spalten in MySQL definiere, verwende ich im Allgemeinen int, varchar (255), Text und die gelegentliche Aufzählung für Boolean. Was nützt es, Spaltentypen genau zu spezifizieren und nicht nur maximal zu belassen?Sollten Sie in MySQL genau Spaltentypen angeben?

Zum Beispiel wird ein Passwort-Feld, das als MD5 kodiert ist, niemals 32 Zeichen überschreiten. Gibt es also einen spürbaren Leistungsgewinn durch die Verwendung von varchar (32) über varchar (255)?

Antwort

4

Pro the manual, ein VARCHAR(N) einer gegebenen tatsächlichen Länge nimmt die gleiche Menge an Platz für jedes N bis zu 255, so dass die Verwendung von 32 spart keinen Platz. Aber es gibt einen Vorteil der Klarheit und Lesbarkeit Ihres Schemas, wenn Sie einen Typ verwenden, der am besten darstellt, wie die tatsächlichen Daten sein müssen.

1

Bei ganzzahligen Typen sparen Sie Platz in der Zeile, wenn Sie eine Ein-Byte-/Zwei-Byte-Ganzzahl anstelle einer Vier- oder Acht-Byte-Ganzzahl verwenden. Dies hat bei Tabellen mit großen Datenmengen spürbare Auswirkungen, da mehr Zeilen auf eine Seite passen.

Für Zeichentypen bin ich wirklich nicht sicher, ob es einen Unterschied machen würde oder nicht, wenn Sie sowohl die DB als auch den Code kontrollieren. Aber bedenken Sie eine Arbeitsteilung, bei der der Datenbankentwickler dem Softwareentwickler sagt: "Hey, lass die Leute nicht mehr als 100 Zeichen in dieses Feld schreiben, es wäre eine totale Verschwendung". Sie erzwingen das, indem Sie das Limit setzen, wobei, wenn es varchar (255) ist, Leute den Speicherplatz verschwenden.

1

Moderne RDBMS bieten aufgrund der Spaltenbreite nicht wirklich eine bessere Leistung in einer 255-Zeichen-Spalte über eine 50-Zeichen-Spalte.

Auf SQL Server, ich achte darauf, meinen Namen, Adresse, etc als NVarChar, so dass ich bei Bedarf zu internationalisieren. Ich habe einen Telefonnummernspeicher, der standardmäßig mehr als 10 Ziffern in den USA speichern kann.

2

Ich würde dem zustimmen, was Clyde sagt, aber Ihr Beispiel für ein Passwort ist nicht besonders gut. Da eine MD5-Summe IMMER aus 32 Zeichen besteht, könnten Sie anstelle eines VARCHAR (32) ein CHAR (32) verwenden, das in vielen Fällen schneller/effizienter wäre.

2

Es ist ein großer Vorteil, wenn Sie die Zeilengröße festgelegt haben können. Dann ist die Indexierung super-schnell. Sie müssen feste Spaltentypen wie int und char (etwas Größe) für Text verwenden.

Wenn Sie trotzdem eine variable Zeilengröße haben und Ihre Tabelle weniger als 100k Datensätze haben wird, sollten Sie sich keine Gedanken über Optimierung machen. Text statt varchar ist flexibler.

In Bezug auf die Datenvalidierung, denke ich, sollten Sie dies in Ihrem Business-Code/Validierung erzwingen.

Verwandte Themen