soporta nchar length cuantos caracteres sql-server indexing sql-server-2012

sql server - nchar - Límite de tamaño de índice de 900 bytes en la longitud del carácter



varchar sql server (3)

El tamaño de almacenamiento para varchar es la longitud real de los datos ingresados ​​+ 2 bytes. Aunque la columna tiene esa sobrecarga de 2 bytes, puede colocar valores varchar de hasta 900 bytes en una columna indexada.

En la práctica, puede crear un índice en una columna de más de 900 bytes de tamaño, pero tendrá un problema si realmente intenta insertar algo de más de 900 bytes:

create table test ( col varchar(1000) ); create index test_index on test (col); -- Warning! The maximum key length is 900 bytes. The index ''test_index'' has maximum length of 1000 bytes. For some combination of large values, the insert/update operation will fail. insert into test select cast(replicate(''x'', 899) as varchar(1000)); -- Success insert into test select cast(replicate(''y'', 900) as varchar(1000)); -- Success insert into test select cast(replicate(''z'', 901) as varchar(1000)); -- Fail -- Msg 1946, Level 16, State 3, Line 8 -- Operation failed. The index entry of length 901 bytes for the index ''test_index'' exceeds the maximum length of 900 bytes.

Tenga en cuenta que el límite de 900 bytes incluye todas las columnas de una clave de índice dada, como muestra este ejemplo:

create table test ( col varchar(1000) , otherCol bit -- This column will take a byte out of the index below, pun intended ); create index test_index on test (col, otherCol); insert into test select cast(replicate(''x'', 899) as varchar(1000)), 0; -- Success insert into test select cast(replicate(''y'', 900) as varchar(1000)), 0; -- Fail insert into test select cast(replicate(''z'', 901) as varchar(1000)), 0; -- Fail

Para estas columnas que normalmente son demasiado grandes para una clave de índice, puede obtener algunos beneficios de la indexación including en un índice.

¿Cuál es el límite de caracteres totales para un límite de índice de 900 bytes que tiene SQL Server 2012? Creé una columna que tiene varchar(2000) , pero creo que excede el byte de 900 que SQL Server limitó? ¿Qué sería un varchar(?) máximo varchar(?) Para caber dentro de la columna de índice de 900 bytes?



Para aquellos en SQLServer 2016, el tamaño de la clave Index se aumentó a 1700 bytes. Novedades en Database Engine - SQL Server 2016

El tamaño máximo de la clave de índice para índices NO CALLADOS se ha aumentado a 1700 bytes.

Manifestación:

create table test ( id varchar(800), id1 varchar(900) ) insert into test select replicate(''a'',800),replicate(''b'',900) create index nci on test(id,id1)