Estrictamente hablando, los tipos MAX
siempre serán un poco más lentos que los tipos que no son MAX, ver Performance comparison of varchar(max) vs. varchar(N). Pero esta diferencia nunca es visible en la práctica, donde simplemente se convierte en ruido en el rendimiento general impulsado por IO.
Su principal preocupación no debe ser el rendimiento de MAX frente a no MAX. Debería preocuparse por la pregunta , ¿será posible que esta columna tenga que almacenar más de 8000 bytes? Si la respuesta es sí, incluso si es un sí muy improbable, entonces la respuesta es obvia: utilice un tipo MAX, el dolor de convertir esta columna más tarde en un tipo MAX no vale la pena el beneficio de rendimiento menor de MAX tipos.
Otras inquietudes (posibilidad de indexar esa columna, indisponibilidad de operaciones de índice en línea para tablas con columnas MAX) ya fueron abordadas por la respuesta de Denis.
BTW, la información sobre las columnas de más de 4 KB que tienen datos restantes en un área de desbordamiento es incorrecta. La información correcta es en Table and Index Organization:
unidad de asignación ROW_OVERFLOW_DATA
para cada partición utilizada por una mesa (montón o mesa agrupado), índice o vista indizada, no es una asignación ROW_OVERFLOW_DATA unidad. Esta unidad de asignación contiene cero (0) páginas hasta una fila de datos con columnas de longitud variable (varchar, nvarchar, varbinary o sql_variant) en la unidad de asignación IN_ROW_DATA excede el límite de tamaño de fila 8 KB.Cuando se alcanza la limitación de tamaño , SQL Server mueve la columna con el ancho más grande de esa fila a una página en la unidad de asignación ROW_OVERFLOW_DATA . Se mantiene en la página original un puntero de 24 bytes a este dato fuera de la fila .
Así que no son las columnas de más de 4KB, son las filas que no caben en el espacio libre en la página, y no es el 'restante', es toda la columna.
"SQL 2012: no puede hacer reconstrucciones de índices en línea en el nivel de partición. Sin embargo, PUEDE hacer reconstrucciones de índice en línea de todos los tipos de datos, excepto texto, ntext, imagen. Esto significa que las tablas con varchar (max), Las columnas nvarchar (max) y varbinary (max) PUEDEN SER RECONSTRUIDAS EN LÍNEA en SQL 2012. SQL 2014: PUEDE hacer reconstrucciones de índices en línea en el nivel de partición. PUEDE hacer reconstrucciones de índices en línea de varchar (max), nvarchar (max), y varbinary (max) tipos de datos. Al igual que con SQL 2012, texto, ntext, imagen no están incluidos. Estos son tipos de datos heredados que realmente deberían eliminarse con el tiempo ". – Triynko