type texto nchar length data sql-server varchar nvarchar

sql server - texto - ¿Existen desventajas al usar VARCHAR(MAX) en una tabla?



sql text max length (6)

Aquí está mi situación.

Básicamente, necesito una columna en una tabla para contener una longitud de caracteres desconocida. Pero tenía curiosidad por saber si en el Servidor SQL pueden surgir problemas al utilizar un VARCHAR (MAX) o NVARCHAR (MAX) en una columna, como: "Esta vez" solo necesito almacenar 3 caracteres y la mayoría de las veces solo almacenar 10 caracteres. Pero hay una pequeña posibilidad de que pueda tener hasta un par de miles de caracteres en esa columna, o incluso un millón, es impredecible. Pero puedo garantizar que no superará el límite de 2 GB.

Solo tenía curiosidad por saber si hay algún problema de rendimiento, o posiblemente mejores formas de resolver este problema cuando esté disponible.


Acabo de ver this artículo el otro día. Documenta un retraso de rendimiento bastante menor para varchar (max) sobre una columna varchar (n). Probablemente no sea suficiente para hacer una diferencia para ti. Pero si lo hace, quizás pueda usar una tabla separada para almacenar esos pocos bloques de texto grandes. Su texto pequeño podría permanecer en la tabla principal, pero podría agregar un campo de marca para pedirle que busque en la tabla nueva las grandes.



He visto algunos problemas, especialmente con las funciones escalares (pero de todos modos, en general son horribles) que devuelven varchar (MAX) y luego no se vuelven a emitir. Por ejemplo, supongamos que tiene una función especial CleanString (somevarcharmax) devuelve varchar (max) y llámela a varchar (50) pero no CAST (CleanString (varchar10col) AS varchar (10)) - problemas de rendimiento desagradables.

Pero normalmente, cuando tiene columnas varchar (max) en una tabla, no debería realizar ese tipo de operaciones en masa, por lo que diría que si lo está usando correctamente para sus necesidades de datos en la tabla, entonces está bien .


Me parece que planeas usar el tipo de datos varchar (MAX) para el propósito previsto.

Cuando los datos en un tipo de datos MAX superan los 8 KB, se utiliza una página de exceso de flujo. SQL Server 2005 asigna automáticamente un indicador de exceso de flujo a la página y sabe cómo manipular las filas de datos de la misma manera que manipula otros tipos de datos.

Para más información, echa un vistazo a Libros en línea: char y varchar


No, varchar (max) se ajusta según el tamaño de la entrada, por lo que es el más eficiente si va a utilizar entradas de tamaño muy variado.


No puede crear índices en las columnas varchar(max) (y nvarchar(max) ) (aunque se pueden incluir en ellas. Pero, ¿quién incluiría una columna en un índice que podría llegar a 2GB ?!), por lo que si desea buscar este valor, hará un escaneo cada vez a menos que use índices de texto completo. Además, recuerde que cualquier diseñador de informes o diseñador de presentaciones (web o de otro tipo) debe asumir que alguien podría colocar la Enciclopedia en esa columna y diseñar a su alrededor. Nada es peor que escuchar "los usuarios probablemente no hagan X". Si un usuario puede hacerlo, lo hará. Si un usuario puede poner un tomo en una columna, en algún momento lo hará. Si nunca deberían hacerlo, entonces IMO, tiene más sentido limitar el tamaño de la columna a un nivel razonable y si un usuario intenta introducir más en esa columna que está permitida, se obtendría una discusión sobre si deberían ingresar ese valor en Esa columna en primer lugar.