Die spezifische Antwort auf Ihre Frage (zumindest für Oracle und wahrscheinlich andere Datenbanken) ist, dass die Länge des Feldes keine Rolle spielt, nur die Länge der Daten. Dies sollte jedoch nicht als bestimmender Faktor dafür herangezogen werden, ob das Feld auf die maximal zulässige Länge eingestellt werden soll oder nicht. Hier sind einige andere Punkte, die Sie berücksichtigen sollten, bevor Sie die Feldgröße maximieren.
Formatierung
Jedes Client-Tool, das die Daten basierend auf der Größe der Felder formatiert, erfordert spezielle Überlegungen zur Formatierung. Beispielsweise zeigt SQL * Plus von Oracle standardmäßig die maximale Größe von Varchar2-Spalten an, auch wenn die Daten nur ein Zeichen lang sind. Vergleichen Sie…
create table f1 (a varchar2(4000), b varchar2(4000));
create table f2 (a varchar2(5), b varchar2(5));
insert into f1 values ('a','b');
insert into f2 values ('a','b');
select * from f1;
select * from f2;
Schlechte Datenfeldlänge
bietet einen zusätzlichen Mechanismus zum Auffangen / Verhindern von schlechten Daten. Eine Schnittstelle sollte nicht versuchen, 3000 Zeichen in ein Feld mit 100 Zeichen einzufügen. Wenn dieses Feld jedoch mit 4000 Zeichen definiert ist, ist dies möglicherweise der Fall. Der Fehler wurde bei der Dateneingabe nicht abgefangen, aber das System kann weiter unten Probleme haben, wenn eine andere Anwendung versucht, die Daten und Drosseln zu verarbeiten. Wenn Sie sich beispielsweise später entscheiden, das Feld in Oracle zu indizieren, überschreiten Sie die maximale Schlüssellänge (abhängig von Blockgröße und Verkettung). Sehen…
create index i1 on f1(a);
Arbeitsspeicher
Wenn die Clientanwendung Arbeitsspeicher mit der maximalen Größe zuweist, würde die Anwendung erheblich mehr Arbeitsspeicher zuweisen, als erforderlich ist. Um dies zu vermeiden, müssten besondere Überlegungen angestellt werden.
Dokumentation
Die Größe des Feldes bietet einen weiteren Datenpunkt für die Dokumentation der Daten. Wir könnten alle Tabellen t1, t2, t3 usw. und alle Felder f1, f2, f3 usw. aufrufen, aber indem wir aussagekräftige Namen angeben, verstehen wir die Daten besser. Wenn beispielsweise eine Adresstabelle für ein Unternehmen mit Kunden in den USA ein Feld mit der Bezeichnung "Bundesstaat" enthält, das aus zwei Zeichen besteht, wird erwartet, dass die Abkürzung für den Bundesstaat aus zwei Zeichen enthalten ist. Auf der anderen Seite können wir erwarten, dass der vollständige Statusname in das Feld aufgenommen wird, wenn das Feld 100 Zeichen enthält.
Trotzdem scheint es ratsam, auf Veränderungen vorbereitet zu sein. Nur weil alle Ihre heutigen Produktnamen aus 20 Zeichen bestehen, bedeutet dies nicht, dass dies immer der Fall ist. Gehen Sie nicht über Bord und machen Sie es 1000, sondern lassen Sie Platz für eine plausible Erweiterung.
Hier ist ein guter Ausgangspunkt für Sie.
http://www.sqlskills.com/BLOGS/KIMBERLY/post/Disk-space-is-cheap.aspx
Möglicherweise habe ich Ihre ursprüngliche Frage falsch verstanden. Lassen Sie mich sehen, ob ich Ihnen ein paar andere Links als Referenz zur Verfügung stellen kann.
Hier finden Sie eine gute Referenz zur Auswahl von Datentypen: http://sqlfool.com/2009/05/performance-considerations-of-data-types/
Der Wechsel von varchar (20) zu varchar (30) mag klein erscheinen, aber Sie müssen mehr über die Funktionsweise von Datenbankstrukturen wissen, um die potenziellen Probleme zu erkennen. Wenn Sie beispielsweise zu varchar (30) wechseln, können Sie den Wendepunkt Ihrer Spalten überschreiten (sollten alle 30 Byte belegt sein) und auf einer Seite gespeichert werden (weniger als 8060 Byte). Dies führt zu einer Zunahme des verwendeten Speicherplatzes, einer Abnahme der Leistung und sogar zu zusätzlichem Overhead bei Ihren Transaktionsprotokollen.
Hier ist ein Link für Datenbankstrukturen: http://technet.microsoft.com/en-us/sqlserver/gg313756.aspx
Hier ist eine für Seitenaufteilungen und Trx-Protokollierung: http://sqlskills.com/BLOGS/PAUL/post/How-expensive-are-page-splits-in-terms-of-transaction-log.aspx
HTH
quelle
Ich dachte, ich würde einen anderen interessanten Punkt teilen, den ich in der folgenden SO-Frage fand:
https://stackoverflow.com/questions/148398/sind-jegliche-Nachteile-im-mer-Mit-nvarcharmax
Originalantwort von: Nick Kavadias
Ich würde dies als großen Nachteil betrachten, wenn ich willkürlich n / varchar (max) -Spalten hinzufüge, und laut MS Site bleibt diese Einschränkung gegen Online-Indexneuerstellungen in SQL Server 2008, 2008 R2 und Denali bestehen. Es ist also nicht spezifisch für SQL Server 2005.
Danke, Jeff
quelle
In einigen Fällen wirkt sich der für ein varchar-Feld zugewiesene Speicherplatz auf die für speicherinterne Sortierungen zugewiesene Speicherkapazität aus.
Ich fand die Präsentationen auf SQLWorkshops.com nachdenklich. Diese Präsentation handelt von einem Fall, in dem eine Sortierung für eine Bestellung von in tempdb übergeht, weil nicht genügend Speicher für char / varchar-Felder zugewiesen wird.
http://webcasts2.sqlworkshops.com/webcasts.asp
Dieser Webcast wurde auch als Artikel auf der folgenden Website vorgestellt:
http://www.mssqltips.com/tip.asp?tip=1955
Beachten Sie in dieser Präsentation, dass es sich bei der Spalte, nach der sortiert wird, nicht um die Spalte char / varchar handelt. In einigen Fällen wirkt sich jedoch der für die Spalte varchar im Speicher zugewiesene Speicherplatz auf die Abfrageleistung aus.
quelle
ANSI_PADDING EINSTELLEN?
Sie landen mit viel Leerzeichen am Ende ...
quelle
Es spielt nur eine Rolle in Bezug auf Speicherplatz und Zeichenlänge. Natürlich wird die Suche nach char-Datentypen und Indizes für diesen Datentyp langsamer als Ganzzahlen, aber dies ist eine andere Diskussion.
Der Varchar-Datentyp ist ein "variabler" Datentyp. Wenn Sie also ein Limit von varchar (500) festlegen, ist dies die maximale Zeichenlänge für dieses Feld. Die Mindestlänge kann zwischen 0 und 500 liegen. Andererseits ist der beanspruchte Speicherplatz für 10, 30 oder 500 Zeichenfelder unterschiedlich.
Ich habe manchmal einen Test für den Datentyp varchar (800) und für Nullwerte durchgeführt, bei dem 17 Bytes verwendet wurden, und für jedes eingefügte Zeichen wurde ein weiteres Byte hinzugefügt. Beispielsweise wurden in einer 400-Zeichen-Zeichenfolge 417 Bytes auf der Festplatte verwendet.
quelle
Ich glaube nicht, dass es einen Unterschied zwischen Tabellen gibt, die mit Spalten von varchar (20) oder varchar ((8000) erstellt wurden, solange die tatsächliche maximale Länge <= 20 ist.
Auf der anderen Seite kann es in einigen Fällen hilfreich sein, den Benutzern die Möglichkeit zu geben, längere Zeichenfolgen zu speichern.
quelle