Usando VARCHAR(MAX)
básicamente le está diciendo a SQL Server "almacene los valores en este campo como mejor los vea", SQL Server luego elegirá si almacenar los valores como un VARCHAR
regular o como LOB (objeto grande). En general, si los valores almacenados tienen menos de 8000 bytes, SQL Server tratará los valores como un VARCHAR
normal. tipo.
Si los valores almacenados son demasiado grandes, se permite que la columna se derrame de la página a las páginas LOB, exactamente como lo hacen para otros tipos de LOB (text
, ntext
y image
) - si esto sucede, se requieren lecturas de página adicionales para leer los datos almacenados en las páginas adicionales (es decir, hay una penalización de rendimiento), sin embargo, esto solo sucede si los valores almacenados son demasiado grandes .
De hecho, en SQL Server 2008 o posterior, los datos pueden desbordarse en páginas adicionales, incluso con los tipos de datos de longitud fija (por ejemplo, VARCHAR(3,000)
), sin embargo, estas páginas se denominan páginas de datos de desbordamiento de fila y se tratan de forma ligeramente diferente.
Versión corta: desde una perspectiva de almacenamiento, no hay ninguna desventaja en usar VARCHAR(MAX)
sobre VARCHAR(N)
para algunos N
.
(Tenga en cuenta que esto también se aplica a los otros tipos de campos de longitud variable NVARCHAR
y VARBINARY
)
FYI:no puede crear índices en VARCHAR(MAX)
columnas