2008-10-02 16 views

Antwort

9

kann auch einfach einen Benutzer-ID-Index verwenden, ist es viel schneller für Joins vs char/varchar. Die zwei Sekunden, die Sie zum Hinzufügen benötigen, können Sie später viel Zeit sparen, wenn Sie aus Versehen die Funktionalität Ihres Schemas erweitern müssen.

einige Tücken denken:

  • sagen, dass wir ein paar Tische zu einem späteren Zeitpunkt hinzufügen, was passiert, wenn jemand will einen Benutzernamen ändern?
  • sagen die App ist erfolgreicher, als wir denken, und wir müssen auf Optimierung schauen, wollen Sie wirklich Ihr Schema an diesem Punkt wiederholen, um den Overhead eines varchar'ed Index zu reduzieren?
+0

Vereinbar, Sie möchten wahrscheinlich eine Benutzer-ID für etwas und es ist viel kleiner als das Speichern eines Benutzernamens in verbundenen Tabellen. –

0

Ich sehe nicht CHAR viel in irgendwelchen MySQL-Datenbanken verwendet, an denen ich gearbeitet habe. Ich würde mit dem VARCHAR gehen

Für eine CHAR (30) zum Beispiel werden die gesamten 30 Zeichen in der Tabelle gespeichert, was bedeutet, dass jeder Eintrag den gleichen Platz belegt, auch wenn Ihr Benutzername nur 10 Zeichen lang ist.

Mit VARCHAR (30) wird nur genügend Platz zum Speichern der Zeichenfolge verwendet, die Sie eingegeben haben.

Auf einem kleinen Tisch wird es nicht viel Unterschied machen, aber auf einem größeren Tisch sollte der VARCHAR beweisen, dass er insgesamt kleiner bleibt.

+1

In diesem Fall denke ich, dass CHAR mehr Sinn macht. Es ist ein Feld fester Länge. Wenn alle Felder in der Tabelle eine feste Länge haben, wird die Abfrage schneller ausgeführt, da MySQL nicht berechnen muss, wo die nächsten Datensätze beginnen. Heutzutage ist der Platz billig, ich werde hier ein bisschen Platz tauschen, um mehr Geschwindigkeit zu haben. – DreamWerx

+0

Achten Sie nur auf die abschließenden Leerzeichen auf CHAR, wenn Sie mit einem String übereinstimmen –

5

Ich würde hart arbeiten, um CHAR() oder VARCHAR() nicht als PK zu verwenden, sondern stattdessen einen int mit einem auto_increment. Dadurch können Sie diese user_id bei Bedarf in untergeordneten Tabellen verwenden und Abfragen auf dem PK sollten schneller sein. Wenn Sie entweder ein CHAR() oder VARCHAR() verwenden müssen, würde ich mit dem CHAR() gehen, da es eine feste Breite ist. Ich bin nicht 100% sicher, wie MySQL mit VARCHAR() umgeht, aber die meisten Datenbank-Engines müssen etwas Magie unter der Haube tun, um der Engine zu helfen, zu wissen, wo die VARCHAR() - Felder enden und wo das nächste Feld beginnt , macht ein CHAR() es einfach und hält den Motor davon ab, zu viel nachdenken zu müssen.

1

[ich würde hart arbeiten, um nicht CHAR() oder VARCHAR() als PK aber einen int mit einem auto_increment stattdessen verwenden.] +1

eine eindeutige Einschränkung des Benutzernamens setzen, aber die int verwenden Feld wie der PK

+0

Dies ist keine Antwort auf die Frage, dies ist ein Vorschlag und löst nicht die Frage –

+0

Ich denke, mein Punkt war die Frage ist eine Lösung, die ist sub-optimal, der Punkt dieser Website ist für die Wissensverbreitung. Es ist auch seltsam, dass ähnliche Antworten, die zur selben Zeit gepostet wurden, nicht nach unten gingen. – RhysC

Verwandte Themen