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 los 900 bytes que SQL Server limitó? ¿Cuál sería un máximo de varchar(?)
para caber dentro de la columna de índice de 900 bytes?Límite de tamaño de índice de 900 bytes en la longitud de caracteres
Respuesta
El tamaño de almacenamiento para varchar es la longitud real de los datos ingresados + 2 bytes. Aunque la columna en sí tiene esa sobrecarga de 2 bytes, puede poner hasta 900 byte valores varchar en una columna indexada.
En la práctica, puede crear un índice en una columna mayor de 900 bytes de tamaño, pero tendrá un problema si en realidad se trata de inserción algo más grande que 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 dado, 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
por estas columnas que normalmente son demasiado grandes para un índice de ke y, puede obtener algunos beneficios de la indexación por including en un índice.
En una nota relacionada, otra opción que puede probar, para obtener un índice en una columna ancha, se describe en http://www.brentozar.com/archive/2013/05/indexing-wide-keys-in-sql-server/ donde se agrega una columna hash a la tabla, luego se indexa y se utiliza en sus consultas.
¡Utilicé la función 'HASHBYTE' con gran efecto, gracias! El OP discutía SQLServer2012, pero tenga en cuenta que el algoritmo 'SHA2_512' solo se introdujo en SQLServer2012, por lo que si está utilizando una versión anterior debe usar un algoritmo diferente, ya que especificar' SHA2_512' para versiones anteriores simplemente devuelve 'null'. Aquí están los [documentos para 2008] (http://technet.microsoft.com/en-us/library/ms174415%28v=sql.100%29.aspx). Por ejemplo: 'seleccione HASHBYTES ('SHA2_512', 'The quick brown fox') como sha2_512, HASHBYTES ('MD5', 'The quick brown fox') como md5, HASHBYTES ('SHA1', 'The quick brown fox') como sha1'. – DarthPablo
Para aquellos con SQL Server 2016, el índice de tamaño de la clave se aumentó a 1700 bytes .. What's new in Database Engine - SQL Server 2016
El tamaño máximo índice de clave para los índices no agrupados se ha aumentado a 1700 bytes.
Demostración: (? América-8859)
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)
- 1. Servidor SQL: el tamaño total de un índice o clave principal no puede exceder 900 bytes
- 2. tamaño total de un índice o una clave principal no puede exceder de 900 bytes
- 3. Límite de longitud variable de caracteres de PostgreSQL
- 4. límite de tamaño de la especificación de conversión printf
- 5. límite de tamaño de MySQL VARCHAR
- 6. Límite de tamaño de parámetro JSON
- 7. perlre límite de longitud
- 8. Longitud de cadena de límite
- 9. ¿Tamaño de almacenamiento límite de MongoDB?
- 10. Evitar el límite de Memcache "1000000 bytes de longitud" en los valores
- 11. javascript object límite de tamaño máximo
- 12. Límite de caracteres en HTML
- 13. AJAX Límite de tamaño de respuesta
- 14. Intent.putExtras límite de tamaño?
- 15. Límite de longitud de línea de origen
- 16. CodeIgniter límite de tamaño de la sesión
- 17. Límite de caracteres de notificaciones push de iPhone
- 18. Tamaño de bytes de un NSDictionary
- 19. PHP Advertencia: contenido POST: la longitud de n bytes supera el límite de 3145728 bytes en Desconocido en la línea 0
- 20. Formulario multiparte HTML: ¿longitud máxima de la cadena "límite"?
- 21. Erlang longitud de bytes binario
- 22. Longitud de límite de la matriz en PHP
- 23. ¿Tamaño de bytes personalizado?
- 24. Juego de caracteres Oracle JDBC y límite de caracteres 4000
- 25. ¿Importa el límite de tamaño VARCHAR?
- 26. Comprobación de longitud de caracteres en rubí
- 27. _jspService excede el límite de 65535 bytes
- 28. Obtiene el tamaño de la cadena std :: string en bytes
- 29. ¿Cómo obtener la longitud de cadena en bytes en nodejs?
- 30. Límite de caracteres para System.out.println() en Java
depende Probablemente en el conjunto de caracteres de la tabla utiliza –
El conjunto de caracteres más pequeña que he utilizado tenía 1 byte por carbón. Supongo que el tuyo es al menos así de grande. – keyser
Es un software SQL Server 2012 de 64 bits. Nada especial sobre conjuntos de personajes. Solo Windows 8 de 64 bits ejecutando SQL Server 2012 64 bits de fábrica. Windows EE. UU.-Inglés. – iefpw