Estoy tratando de poner un índice en una columna que contendrá las URL. Como la longitud máxima de una URL puede ser de más de 2000 caracteres, configuro el tipo de datos a NVARCHAR (3000). Cuando hice esto obtuve el error The total size of an index or primary key cannot exceed 900 bytes
. Como es posible que necesite buscar registros por URL, necesitaré un índice en mi Columna de URL. ¿Hay alguna forma de evitar esta limitación?Servidor SQL: el tamaño total de un índice o clave principal no puede exceder 900 bytes
Respuesta
Puede crear una columna calculada para la suma de comprobación de la URL y luego usar la suma de comprobación en la consulta. Checksums no será único, pero reducirá rápidamente el número de posibles coincidencias.
En primer lugar, añadir una columna calculada a su mesa, así:
Alter Table YourTableName Add URL_HASH As CheckSum(URL)
Ahora índice de la columna así:
Create Index idx_YourTableName_URL_HASH On YourTableName(URL_HASH)
Ahora usted puede escribir una consulta que va a hacer una búsqueda de índice para encontrar la fila que está buscando:
Select URL
From YourTableName
Where URL_HASH = CheckSum(N'google.com')
And URL = 'google.com'
Este método debería funcionar muy bien para la coincidencia exacta es. Si desea coincidencias parciales, es mejor utilizar la funcionalidad de búsqueda de texto completo.
Gracias decidimos implementar esto. – Luke101
Hola G Mastros. Gracias por tu respuesta. Tengo una columna Varbinary que contiene una gran cantidad de datos. Esta columna puede ser nula y tengo una consulta que busca registros donde esta columna no es nula. Su enfoque de suma de comprobación también parece ser muy útil en este caso. Comprobé que la suma de comprobación para la columna que admite nulos es 2147483647. Aunque puede funcionar, parece extraño codificar este número en las consultas. ¿Este número será el mismo cuando migremos a otra versión de SqlServer? Me pegué un tiro en el pie una vez que usé el método GetHashCode en C# y terminó devolviendo un valor diferente según el sistema operativo. – Mariusz
Realmente no lo sé con certeza. Sin embargo, en lugar de codificar el número, podría usar "suma de comprobación (Convertir (varbinary, null))". Luego, si el valor cambia con la versión db, aún estará protegido. –
La búsqueda de texto completo de SQL Server es lo que probablemente desee.
http://msdn.microsoft.com/en-us/library/ms142571.aspx
usted tiene que saltar a través de unos aros de menor importancia con su puesta en marcha frente a un índice simple pero no debería ser súper duro.
- 1. tamaño total de un índice o una clave principal no puede exceder de 900 bytes
- 2. Límite de tamaño de índice de 900 bytes en la longitud de caracteres
- 3. ¿la clave principal siempre está indexada en el servidor sql?
- 4. ¿La clave única del servidor Sql también es un índice?
- 5. clave principal SQL, INT o GUID o ...?
- 6. ¿Por qué no puedo crear este índice de texto completo del servidor sql?
- 7. ¿Clave principal compuesta o no?
- 8. clave primaria sql e índice
- 9. Acerca del índice y la clave principal en SQL?
- 10. ¿La clave principal es automáticamente un índice?
- 11. Índice en clave externa o no en SQL Server 2008
- 12. ¿Cómo agregar un índice o clave principal a un tipo de tabla definida por el usuario en SQL Server?
- 13. Reconstrucción de índice en el servidor sql
- 14. Diferencia en el rendimiento del servidor SQL con la clave principal de una o varias columnas?
- 15. SQL Server BIGINT o DECIMAL (18,0) para la clave principal
- 16. ¿Hay alguna forma de convertir un índice no agrupado en una clave principal en una clave agrupada? (SQL Server 2008)
- 17. Sqlite3: ¿Desactivar el índice de clave principal durante la inserción?
- 18. EF CodeFirst crear índice de clave principal no agrupado
- 19. Clave principal ascendente vs descendente
- 20. Cómo aumentar automáticamente la clave no principal? - Servidor
- 21. Clave principal sin ningún índice en una tabla?
- 22. Índice filtrados del servidor SQL
- 23. Tamaño de clave principal/externa de MySQL?
- 24. ¿Utiliza "varchar" como clave principal? ¿mala idea? o bien?
- 25. ¿Se necesita un índice para una clave principal en SQLite?
- 26. Clave principal de actualización del Servidor SQL que también es una clave externa en dos tablas
- 27. bueno/no importa/es malo incluir la clave principal en el índice de cobertura?
- 28. Obtenga la suma total de todo el tamaño de las bases de datos en un servidor SQL
- 29. cambiar una clave principal de no agrupado a Agrupado
- 30. ¿Índice único o clave única?
Eso realmente no me parece muy eficiente. De hecho, parece una pesadilla completa para el motor de DB. ¿Ha establecido que * do * necesita buscar por URL, y que esta búsqueda va a ser lenta? La búsqueda de texto puede ser bastante rápida, ya sabes. También existe la posibilidad de que pueda dividir la URL en bits, indexar solo uno de esos bits (el que más varía) y luego relacionar la parte del índice con la url completa. En resumen, hay muchas estrategias posibles aquí. – Robinson