TEXT
e VarChar(MAX)
sono tipi di dati di carattere di lunghezza variabile non Unicode di grandi dimensioni, che possono contenere un massimo di 2147483647 caratteri non Unicode (ovvero la capacità massima di archiviazione è: 2 GB).
Come da collegamento MSDN, Microsoft suggerisce di evitare l'utilizzo del tipo di dati Text e verrà rimosso in una versione futura di SQL Server. Varchar (Max) è il tipo di dati suggerito per la memorizzazione dei valori di stringa di grandi dimensioni invece del tipo di dati Testo.
- Archiviazione In-Row o Out-of-Row
I dati di una Text
colonna di tipo vengono archiviati fuori riga in pagine di dati LOB separate. La riga nella pagina dei dati della tabella avrà solo un puntatore di 16 byte alla pagina dei dati LOB in cui sono presenti i dati effettivi. Mentre i dati di una Varchar(max)
colonna di tipo vengono archiviati nella riga se è inferiore o uguale a 8000 byte. Se il valore della colonna Varchar (max) attraversa gli 8000 byte, il valore della colonna Varchar (max) viene archiviato in pagine di dati LOB separate e la riga avrà solo un puntatore di 16 byte alla pagina di dati LOB in cui sono presenti i dati effettivi. Quindi In-Row
Varchar (Max) è buono per le ricerche e il recupero.
- Funzionalità supportate / non supportate
Alcune funzioni stringa, operatori o costrutti che non funzionano sulla colonna Tipo testo, ma funzionano sulla colonna Tipo VarChar (Max).
=
Uguale a Operatore nella colonna di tipo VarChar (Max)
Raggruppa per clausola sulla colonna di tipo VarChar (Max)
- Considerazioni sull'IO del sistema
Come sappiamo che i valori di colonna del tipo VarChar (Max) sono memorizzati fuori riga solo se la lunghezza del valore da archiviare è maggiore di 8000 byte o non c'è abbastanza spazio nella riga, altrimenti memorizzerà in fila. Quindi, se la maggior parte dei valori memorizzati nella colonna VarChar (Max) sono grandi e archiviati fuori riga, il comportamento di recupero dei dati sarà quasi simile a quello della colonna Tipo di testo.
Ma se la maggior parte dei valori memorizzati nelle colonne di tipo VarChar (Max) sono abbastanza piccoli da essere archiviati in fila. Quindi il recupero dei dati in cui le colonne LOB non sono incluse richiede il numero maggiore di pagine di dati da leggere poiché il valore della colonna LOB viene archiviato in fila nella stessa pagina di dati in cui sono memorizzati i valori delle colonne non LOB. Ma se la query di selezione include la colonna LOB, richiede un numero inferiore di pagine da leggere per il recupero dei dati rispetto alle colonne del tipo di testo.
Conclusione
Utilizzare il VarChar(MAX)
tipo di dati anziché TEXT
per una buona prestazione.
fonte