Genom att använda VARCHAR(MAX)
du säger i princip till SQL Server "lagra värdena i det här fältet hur du ser bäst", SQL Server kommer sedan att välja om värdena ska lagras som en vanlig VARCHAR
eller som en LOB (stort objekt). Om de lagrade värdena är mindre än 8 000 byte kommer SQL Server i allmänhet att behandla värden som en vanlig VARCHAR
typ.
Om de lagrade värdena är för stora tillåts kolumnen att spilla av sidan till LOB-sidor, precis som de gör för andra LOB-typer (text
, ntext
och bild
) - om detta händer krävs ytterligare sidläsningar för att läsa data som lagrats på de extra sidorna (dvs. det finns en prestanda lite grann), men detta händer bara om de lagrade värdena är för stora .
Faktum är att data under SQL Server 2008 eller senare kan svämma över till ytterligare sidor även med datatyperna med fast längd (t.ex. VARCHAR(3 000)
), men dessa sidor kallas radspillningsdatasidor och behandlas något annorlunda.
Kort version: Ur ett lagringsperspektiv finns det ingen nackdel med att använda VARCHAR(MAX)
över VARCHAR(N)
för vissa N
.
(Observera att detta även gäller de andra fälttyperna med variabel längd NVARCHAR
och VARBINARY
)
FYI - Du kan inte skapa index på VARCHAR(MAX) kolumner