Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie wähle ich optimierte Datentypen für Spalten [innodb-spezifisch] aus?

Kurze Zusammenfassung:

(nur meine Meinung)

  1. für E-Mail-Adresse - VARCHAR(255)
  2. für Benutzername - VARCHAR(100) oder VARCHAR(255)
  3. für id_username - verwenden Sie INT (es sei denn, Sie planen mehr als 2 Milliarden Benutzer in Ihrem System)
  4. Telefonnummern - INT oder VARCHAR oder vielleicht CHAR (hängt davon ab, ob Sie Formatierungen speichern möchten)
  5. Beiträge - TEXT
  6. Daten - DATE oder DATETIME (geben Sie auf jeden Fall Zeiten für Dinge wie Posts oder E-Mails ein)
  7. Geld - DECIMAL(11,2)
  8. Verschiedenes - siehe unten

Soweit zur Verwendung von InnoDB, weil VARCHAR soll schneller sein, darüber würde ich mir keine Sorgen machen, oder Geschwindigkeit im Allgemeinen. Verwenden Sie InnoDB, weil Sie Transaktionen durchführen müssen und/oder Fremdschlüsseleinschränkungen (FK) für die Datenintegrität verwenden möchten. Außerdem verwendet InnoDB Sperren auf Zeilenebene, während MyISAM nur Sperren auf Tabellenebene verwendet. Daher kann InnoDB höhere Parallelitätsebenen besser handhaben als MyISAM. Verwenden Sie MyISAM, um Volltextindizes zu verwenden und für etwas weniger Overhead.

Wichtiger für die Geschwindigkeit als der Suchmaschinentyp:Setzen Sie Indexe auf die Spalten, die Sie schnell durchsuchen müssen. Setzen Sie immer Indizes auf Ihre ID/PK-Spalten, wie den von mir erwähnten id_username.

Weitere Details:

Hier ist eine Reihe von Fragen zu MySQL-Datentypen und Datenbankdesign (Achtung, mehr als Sie gefragt haben):

Und ein paar Fragen zur Verwendung der InnoDB-Engine:

Ich verwende einfach tinyint für fast alles (im Ernst).

Bearbeiten – So speichern Sie „Beiträge:“

Unten sind einige Links mit mehr Details, aber hier ist die Kurzversion. Zum Speichern von "Beiträgen" benötigen Sie Platz für eine lange Textzeichenfolge. CHAR Die maximale Länge ist 255, das ist also keine Option, und natürlich CHAR würde ungenutzte Zeichen gegenüber VARCHAR verschwenden , was CHAR variabler Länge ist .

Vor MySQL 5.0.3, VARCHAR Die maximale Länge war 255, also bliebe TEXT . In neueren Versionen von MySQL können Sie jedoch VARCHAR verwenden oder TEXT . Die Wahl hängt von den Vorlieben ab, aber es gibt ein paar Unterschiede. VARCHAR und TEXT Die maximale Länge beträgt jetzt beide 65.535, aber Sie können Ihr eigenes Maximum für VARCHAR festlegen . Nehmen wir an, Sie denken, dass Ihre Posts nur maximal 2000 sein müssen, Sie können VARCHAR(2000) einstellen . Wenn Sie alle an das Limit stoßen, können Sie ALTER Sie stellen später eine Tabelle und stoßen sie auf VARCHAR(3000) . Andererseits TEXT speichert seine Daten tatsächlich in einem BLOB (1). Ich habe gehört, dass es Leistungsunterschiede zwischen VARCHAR geben kann und TEXT , aber ich habe keinen Beweis gesehen, also sollten Sie sich das genauer ansehen, aber Sie können dieses kleine Detail in Zukunft jederzeit ändern.

Noch wichtiger ist, dass Sie diese "Post"-Spalte mit einem Volltextindex anstelle von LIKE durchsuchen wäre viel schneller (2). Sie müssen jedoch die MyISAM-Engine verwenden, um den Volltextindex zu verwenden, da InnoDB ihn nicht unterstützt . In einer MySQL-Datenbank können Sie eine heterogene Mischung von Engines für jede Tabelle haben, also müssten Sie nur Ihre "posts"-Tabelle dazu bringen, MyISAM zu verwenden. Wenn Sie jedoch unbedingt „posts“ benötigen, um InnoDB (für Transaktionen) zu verwenden, dann richten Sie einen Trigger ein, um die MyISAM-Kopie Ihrer „posts“-Tabelle zu aktualisieren und die MyISAM-Kopie für alle Ihre Volltextsuchen zu verwenden.

Siehe unten für einige nützliche Zitate.

Zu guter Letzt ist hier ein großartiger Beitrag über die Vor- und Nachteile von VARCHAR im Vergleich zu TEXT. Es spricht auch das Leistungsproblem an: