when type non length differences bigger and sql-server

sql-server - type - when to use varchar vs nvarchar



¿Diferencia entre varchar(5) y varchar(5000)? (2)

MS SQL Server almacena varchar (8000) y más corto a diferencia de varchar (MAX).

El tamaño al que se mueven los tipos MAX de las páginas de datos de una tabla y dentro de sus propias páginas de datos ahora se fija en 8,000 bytes si [tipos de valores grandes fuera de la fila] se establece en OFF.

Hay varias razones por las que usaría varchar (n) en lugar de varchar (MAX)

Actuación

varchar (n) es más rápido http://rusanu.com/2010/03/22/performance-comparison-of-varcharmax-vs-varcharn/

Indexación

varchar (900) y más pequeño se pueden indexar, pero no varchar (MAX) o varchar (901) o mayor

Compatibilidad

MS SQL Server Compact Edition no admite varchar (MAX)

Posible duplicado:
¿Hay alguna ventaja de varchar (500) sobre varchar (8000)?

En SQL Server podemos especificar el tipo de campo varchar(n) :

El tamaño de almacenamiento es la longitud real en bytes de los datos ingresados, no n bytes.

A menudo, al planificar una estructura de base de datos, trato de imaginar la longitud máxima posible de cadenas que se almacenarán en estos campos varchar y luego estableceré ese tamaño imaginado + alguna copia de seguridad para el campo varchar . A veces puede ocurrir que la habitación provista inicialmente no sea suficiente para el campo y luego necesito aumentar la longitud.

Pero, en realidad, ¿vale la pena limitar el campo varchar a algún valor y no solo establecer algo como varchar(5000) o incluso varchar(max) que se adapte al 100% al caso? ¿Existe alguna ventaja en la organización de páginas en SQL Server o en la organización de índices cuando limito esa longitud n ?

Actualizar

Esto es lo que quiero decir (la ventaja): https://stackoverflow.com/a/5353196/355264

Sí, el optimizador de consultas puede adivinar cuántas filas caben en una página, si tiene muchos campos varchar que son más grandes de lo necesario, SQL Server puede adivinar internamente el número incorrecto de filas.

¿Es cierto lo anterior? ¿Y hay otras ventajas?


Por un lado, NO PUEDES indexar ninguna columna que tenga más de 900 bytes de tamaño.

Eso solo (para mí) es un criterio varchar(5000) contra el uso de varchar(5000) (o varchar(max) ) todo el tiempo, incluso si no es necesario ...

Use el tamaño apropiado.

Además: varchar agrega al menos 2 bytes de sobrecarga, por lo que para cadenas de 10 caracteres o menos, siempre recomendaría usar char(n) lugar.

char(5) utilizará 5 bytes de almacenamiento - siempre. varchar(5) utiliza entre 2 y 7 bytes de almacenamiento.