Al usar VARCHAR(MAX)
, básicamente le está diciendo a SQL Server "almacene los valores en este campo como mejor le parezca", SQL Server elegirá si desea almacenar los valores como un objeto regular VARCHAR
o como un LOB (objeto grande). En general, si los valores almacenados tienen menos de 8.000 bytes, SQL Server tratará los valores como un VARCHAR
tipo normal .
Si los valores almacenados son demasiado grandes, entonces se permite que la columna se desborde de la página en páginas LOB, exactamente como lo hacen con 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 un penatly de rendimiento), sin embargo, esto solo ocurre 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 (p VARCHAR(3,000)
. Ej. ); Sin embargo, estas páginas se denominan páginas de datos de desbordamiento de filas y se tratan de manera ligeramente diferente.
Versión corta: desde una perspectiva de almacenamiento, no hay ninguna desventaja de usar VARCHAR(MAX)
over VARCHAR(N)
para algunos N
.
(Tenga en cuenta que esto también se aplica a los otros tipos de campos de longitud variable NVARCHAR
yVARBINARY
)
FYI: no puede crear índices en VARCHAR(MAX)
columnas