Sé que cuando VARCHAR(MAX)/NVARCHAR(MAX)
se usan columnas, los datos se almacenan fuera de la fila ...
En realidad, eso depende de la configuración de la large value types out of row
opción, que se puede configurar usando sp_tableoption
. De la documentación :
El valor predeterminado es que los MAX
valores se almacenen en fila , hasta 8000 bytes, si encajan. A menos que haya utilizado sp_tableoption
para cambiar el valor predeterminado, sus MAX
datos probablemente se almacenarán en fila.
Dicho esto, es una mala práctica usar MAX
tipos de datos para valores que nunca excederán los 8000 bytes; en su lugar, use un tipo que no sea MAX. Además de cualquier otra cosa, el rendimiento a menudo es significativamente peor cuando se trata de MAX
tipos, porque SQL Server debe estar preparado para hacer frente a datos que pueden tener un tamaño de hasta 2 GB.
¿Cada campo se almacena fuera de la fila o solo los máximos?
Solo los MAX
unos. Además, si una MAX
columna de la fila anterior se mueve fuera de la fila, solo esa columna de esa fila se ve afectada. Se reemplaza en fila por un puntero a la LOB
estructura fuera de fila . También hay circunstancias en las que las columnas que no son MAX pueden moverse fuera de la fila.
Si está utilizando el índice agrupado de la tabla para leer el registro completo, ¿también se leen los campos almacenados fuera de la fila?
El escaneo del índice agrupado solo atraviesa datos en fila. Si se necesitan datos fuera de la fila para la consulta, se busca utilizando el puntero en fila.