2013-11-26 3 views
13

Was sind die allgemeinen Speicher- und Leistungsunterschiede zwischen den beiden folgenden Tabellen, wenn ihr einziger Unterschied nvarchar(50) vs. nvarchar(max) ist und die Zeichenfolgen in jedem Feld von 1 bis 50 Zeichen? Dies ist in SQL Server 2005Implikationen von nvarchar (50) vs nvarchar (max)

TABELLE 1

firstname nvarchar (50) 
lastname nvarchar (50) 
username nvarchar (50) 

TABELLE 2

firstname nvarchar (max) 
lastname nvarchar (max) 
username nvarchar (max) 
+3

Bitte lesen Sie diese [Artikel] (http://rusanu.com/2010/03/22/performance-comparmagy-of-varcharmax-vs-varcharn/). –

+0

Ein anderer Vergleich: http://sqlhints.com/2013/03/10/difference-between-sql-server-varchar-and-varcharma-data-type/ – NoChance

+0

@EmmadKareem der Artikel diskutiert Varchar (8-Bit-Codepages), meine Frage bezieht sich auf nvarchar (Unicode-kompatibel) –

Antwort

22

Wenn Sie garantiert sind, Zeichenketten zwischen 1 und 50 Zeichen zu haben, dann wird die gleiche Abfrage, die über Zeichenketten von bis zu Länge X laufen gelassen wird schneller mit varchar (X) vs. varchar (MAX). Darüber hinaus können Sie einen Index für ein Varcharfeld (MAX) nicht erstellen.

Sobald Ihre Zeilen Werte von mehr als 8000 Zeichen haben, müssen Sie weitere Leistungsüberlegungen treffen (die Zeilen werden grundsätzlich als TEXT anstelle von varchar (n) behandelt). Obwohl dies für einen Vergleich nicht sehr relevant ist, gibt es für Strings mit einer Länge über 8000 keine VARCHAR (N) -Option.

+1

+1 für die detaillierte Erklärung. –

-3

nvarchar max für Spalten bis zu 2 GB ist. Im Wesentlichen braucht es mehr Ressourcen. Sie sind besser dran mit dem nvarchar (50), wenn Sie wissen, dass Sie nicht so viel Platz benötigen. jedes Zeichen ist ungefähr 2 Bytes, also mit 2 GB das ist 1 Milliarde Zeichen ...

+1

Ich glaube, du hast über NCARCHAR und NCHAR falsch verstanden !!! –

5

In erster Linie wird es nicht möglich sein, Indizes für die Spalten der (maximalen) Länge zu erstellen . Wenn Sie also durchsuchbare Daten speichern, dh wenn diese Spalten Teil des WHERE-Prädikats sein sollen, können Sie die Abfrageleistung möglicherweise nicht verbessern. Möglicherweise müssen Sie in diesem Fall die Volltext-Suche und Indizes für diese Spalten berücksichtigen.

+0

Das ist ein guter Anfang. Alles andere, was Sie sich vorstellen können, sollte jemand beachten, wenn er zwischen nvarchar (n) und nvarchar (max) entscheidet? –