Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

varchar(max) ovunque?

Usando VARCHAR(MAX) in pratica stai dicendo a SQL Server "memorizza i valori in questo campo come vedi meglio", SQL Server sceglierà quindi se archiviare i valori come un normale VARCHAR o come LOB (oggetto grande). In generale, se i valori archiviati sono inferiori a 8.000 byte, SQL Server tratterà i valori come un normale VARCHAR digita.

Se i valori memorizzati sono troppo grandi, la colonna può riversarsi fuori dalla pagina nelle pagine LOB, esattamente come fanno per altri tipi LOB (text , ntext e image ). .

Infatti in SQL Server 2008 o versioni successive i dati possono traboccare in pagine aggiuntive anche con i tipi di dati a lunghezza fissa (ad es. VARCHAR(3,000) ), tuttavia queste pagine sono chiamate pagine di dati di overflow delle righe e sono trattate in modo leggermente diverso.

Versione breve: dal punto di vista dell'archiviazione non vi è alcuno svantaggio nell'utilizzo di VARCHAR(MAX) su VARCHAR(N) per alcuni N .

(Nota che questo vale anche per gli altri tipi di campo a lunghezza variabile NVARCHAR e VARBINARY )

Cordiali saluti - non puoi creare indici su VARCHAR(MAX) colonne