2010-09-10 19 views
21

Voglio sapere quali sono i pro e i contro usando varchar (500) vs varchar (max) in termini di prestazioni, memoria e quant'altro da considerare?differenza tra varchar (500) vs varchar (max) nel server sql

  • Entrambi utilizzano la stessa quantità di spazio di archiviazione?

La risposta è diversa nel caso di SQL Server 2000/2005/2008?

+2

[Vedere qui la mia risposta per un'altra differenza] (http://stackoverflow.com/questions/2009694/is-there-an-advantage-to-varchar500-over-varchar8000/5654947#5654947) e questo post del blog [ di Remus Rusanu] (http: // rusanu.com/2010/03/22/performance-confronto-di-varcharmax-vs-varcharn /) –

+0

Guarda il link: http://stackoverflow.com/q/28980502/1805776 – vicky

risposta

29

In SQL Server 2000 e SQL Server 7, una riga non può superare 8000 byte di dimensioni. Ciò significa che una colonna VARBINARY può memorizzare solo 8000 byte (supponendo che sia l'unica colonna in una tabella), una colonna VARCHAR può memorizzare fino a 8000 caratteri e una colonna NVARCHAR può memorizzare fino a 4000 caratteri (2 byte per carattere unicode). Questa limitazione deriva dalla dimensione della pagina interna di 8 KB utilizzata da SQL Server per salvare i dati sul disco.

Per memorizzare più dati in una singola colonna, è necessario utilizzare i tipi di dati TEXT, NTEXT o IMAGE (BLOB) che sono memorizzati in una raccolta di pagine di dati da 8 KB separate dalle pagine di dati che memorizzano il altri dati nella stessa tabella. Queste pagine di dati sono disposte in una struttura ad albero B. I BLOB sono difficili da gestire e manipolare. Non possono essere utilizzati come variabili in una procedura o in una funzione e non possono essere utilizzati all'interno di funzioni stringa quali REPLACE, CHARINDEX o SUBSTRING. Nella maggior parte dei casi, è necessario utilizzare i comandi READTEXT, WRITETEXT e UPDATETEXT per manipolare i BLOB.

Per risolvere questo problema, Microsoft ha introdotto i tipi di dati VARCHAR (MAX), NVARCHAR (MAX) e VARBINARY (MAX) in SQL Server 2005. Questi tipi di dati possono contenere la stessa quantità di dati che i BLOB possono contenere (2 GB) e sono memorizzati nello stesso tipo di pagine di dati utilizzate per altri tipi di dati. Quando i dati in un tipo di dati MAX superano 8 KB, viene utilizzata una pagina di overflow. SQL Server 2005 assegna automaticamente un indicatore di overflow alla pagina e sa come manipolare le righe di dati nello stesso modo in cui manipola altri tipi di dati. È possibile dichiarare le variabili dei tipi di dati MAX all'interno di una stored procedure o funzione e persino passarle come variabili. Puoi anche usarli all'interno delle funzioni di stringa.

Microsoft consiglia di utilizzare tipi di dati MAX anziché BLOB in SQL Server 2005. Infatti, i BLOB vengono deprecati nelle versioni future di SQL Server.

credito: http://www.teratrax.com/articles/varchar_max.html


In SQL Server 2005 e SQL Server 2008 , la dimensione massima di archiviazione per VARCHAR (MAX) è 2^31-1 byte (2,147,483,647 byte o 2 GB - 1 byte). La dimensione di archiviazione è la lunghezza effettiva dei dati immessi + 2 byte. I dati inseriti possono avere una lunghezza di 0 caratteri. Poiché ogni carattere in un tipo di dati VARCHAR utilizza un byte, la lunghezza massima per un tipo di dati VARCHAR (MAX) è 2.147.483.645.

completa lettura interessante per voi: http://www.sql-server-helper.com/faq/sql-server-2005-varchar-max-p01.aspx

Riferimento: http://msdn.microsoft.com/en-us/library/ms143432.aspx

+1

+1 Risposta molto dettagliata. –

+0

L'unica cosa che aggiungerei è un ulteriore commento sulle limitazioni del 2000 - implicito in quanto sopra - che se hai più colonne varchar, la loro lunghezza combinata non può superare 8000 –

+0

D'accordo con Paul, un'altra cosa è, è nel caso di varchar (500) è auto vincolato con la lunghezza e in caso di varchar (max) non lo è. quindi anche questo va bene. ancora una cosa, sarà utile per il server sql utilizzare varchar (500) o varchar (max) in ogni caso per allocare memoria mentre si inseriscono i record mentre abbiamo bisogno di solo 500 caratteri per archiviarli? –

2

Una colonna VARCHAR(MAX) accetterà un valore di 501 caratteri o più, mentre una colonna VARCHAR(500) non lo faranno. Pertanto, se si dispone di una regola aziendale che limita un valore a 500 caratteri, VARCHAR(500) sarà più appropriato.