sql >> Databasteknik >  >> RDS >> Sqlserver

varchar(max) överallt?

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



  1. Hur ställer jag in tidszonen för MySQL?

  2. Lista över icke-tomma tabeller i MySQL-databasen

  3. Använd gv$session för att se om en fråga hänger sig

  4. Vad är det bästa sättet att paginera resultat i SQL Server