Ich habe einige Felder für meine Tabellen, die Zeichenfolgen sind, und im Moment haben die meisten Feldgrößen ziemlich hohe Zeichenbeschränkungen. Zum Beispiel 100 Zeichen für den Straßennamen. Gibt es eine Strafe für die Verwendung großer Felder? Wenn ich beispielsweise das Limit für dieses Feld auf 30 Zeichen ändere, gibt es dann einen Leistungsgewinn oder eine Effizienz mit der Größe? Es würde ungefähr 50 Felder geben, die Kandidaten für eine Schrumpfung sein könnten.
Vielen Dank für Ihre Vorschläge.
Antworten:
Wenn Sie über
varchar
undnvarchar
dann nein sprechen , gibt es keine Strafe für das Zulassen einer höheren Feldlänge.Einige Vorbehalte zu beachten:
CHAR
.Varchar(2)
Zum Beispiel werden tatsächlich zwischen 2 und 4 Bytes pro Zeile verwendet, währendCHAR(2)
immer 2 verwendet werden.quelle
Wenn Sie meinen: "Gibt es eine Strafe für die Deklaration der Feldgröße, die größer ist als die tatsächlich darin gespeicherten Werte?", Lautet die Antwort Nein, solange sie als varchar deklariert ist. Jede mir bekannte SQL DB-Engine speichert nur die Anzahl der tatsächlich in den Daten angegebenen Zeichen (plus einen Längenwert). Wenn Sie das Feld also als varchar (100) definieren, aber nur 10 Zeichen darin speichern, werden nur 10 Zeichen auf der Festplatte belegt (plus etwa 2 Byte für die Länge). Im Zweifelsfall mache ich meine Varchar-Felder routinemäßig lächerlich groß.
Wenn Sie meinen: "Gibt es eine Strafe für das Speichern langer Zeichenfelder?", Lautet die Antwort "Ja". Speicherplatz ist heute billig, aber nicht kostenlos, sodass Sie ihn nicht ohne Grund verschwenden möchten. Wahrscheinlich wichtiger ist, dass das Lesen von Daten von der Festplatte einige Zeit in Anspruch nimmt. Je länger Ihre Datenfelder sind, desto langsamer wird das Programm. Wenn das Feld indiziert ist, kann dies Ihre Abfragen wirklich verlangsamen, da bei jedem Lesevorgang der Schlüsselwert mit diesem großen langen Feld verglichen werden muss.
Denken Sie daran, dass der Benutzer ein Big-Data-Eingabefeld früher oder später verwendet, wenn Sie es eingeben.
Alles in allem würde ich mich eher auf die Seite von zu groß als von zu klein irren. Der Speicherplatz ist so günstig, dass Sie Benutzer nicht zwingen müssen, Abkürzungen im laufenden Betrieb zu erfinden, da sie die realen Daten nicht in das verfügbare Feld einpassen können. Das System, an dem ich heute arbeite, verfügt über ein Produktbeschreibungsfeld, das für viele der tatsächlichen Namen unserer Produkte zu klein ist, sodass Benutzer abkürzen müssen. Und natürlich wird jeder Benutzer anders abgekürzt, sodass wir zwanzig verschiedene Möglichkeiten haben, dasselbe zu sagen.
quelle
Jeder, der behauptet, dass es keine Strafe gibt, wenn er ein Feld deklariert, das größer ist als das, was tatsächlich in der Tabelle gespeichert wird, ist falsch. Die tatsächliche Größe der Daten (plus der 2-Byte-Overhead) wird tatsächlich gespeichert, aber es ist die Spaltendefinition, die verwendet wird, um die Schätzung für den Ausführungsplan zu bestimmen. Während das Deklarieren eines Varchars (1000) zum Speichern eines 10-Zeichen-Werts nur 12 Zeichen Speicherplatz verbraucht, sind die Schätzungen des Ausführungsplans viel weniger effizient und die Ergebnisse werden negativ verzerrt, sowohl hinsichtlich der Speicherkapazität für die Operation als auch hinsichtlich der Speicherkapazität ob der Vorgang nur im Speicher ausgeführt werden kann oder ob auch temporärer Speicherplatz für das Laufwerk erforderlich ist. Sie können Ihre Spalte varchar (1000) erstellen, aber die Engine weiß nicht, dass alle Ihre gespeicherten Werte wirklich kleiner als varchar (10) sind.
quelle
Die Überprüfung der Feldlänge ist "kostenlos", dh Sie müssen keine
CHECK
Einschränkung verwenden, um dasselbe zu tun. Und Sie möchten keine übergroßen Datenwerte, wenn Sie beispielsweise Ihre Daten in eine andere Datenbank hochladen müssen, die dasselbe Datenelement gemäß der internationalen Standardadresse auf 35 Zeichen beschränkt hat.quelle