Tenemos una base de datos en la que todos los PK son GUID, y la mayoría de los PK son también el índice agrupado de la tabla. Sabemos que esto es malo (debido a la naturaleza aleatoria de los GUID). Entonces, parece que hay básicamente dos opciones aquí (excepto arrojar GUIDs como PK en conjunto, lo que no podemos hacer (al menos no en este momento)).Base de datos SQL Server con PK GUID en clúster: ¿cambiar de índice agrupado o cambiar a GUID secuenciales (comb)?
- Podríamos cambiar el algoritmo de generación GUID a, p. Ej. el que utiliza NHibernate, como se detalla en this post, o
- , para las tablas que son más utilizadas, podemos cambiar a un índice agrupado diferente, p. una columna de IDENTIDAD, y mantener los GUID "aleatorios" como PK.
¿Es posible dar alguna recomendación general en tal escenario?
La aplicación en cuestión tiene más de 500 tablas, la más grande actualmente en alrededor de 1,5 millones de filas, algunas tablas alrededor de 500 000 filas, y el resto significativamente más bajo (la mayoría de ellos muy por debajo de 10K).
Además, la aplicación ya está instalada en varios sitios de clientes, por lo que debemos tener en cuenta los posibles efectos negativos para los clientes existentes.
Gracias!
Gracias por su respuesta. Solo un breve comentario/aclaración: no me importa la capacidad de adivinación de los GUID, solo su singularidad en las instalaciones. – Eyvind
Luego, simplemente cambiando sus guias a guias secuenciales como NEWSEQUENTIALID() en SQL Server solucionare la mayoria de sus problemas inmediatos. Sin embargo, no posponga un nuevo factor en una identidad más de lo necesario. –
Entonces, dado que optamos por GUID secuenciales: ¿qué pasa con los clientes con 100K de filas en muchas tablas? ¿Le beneficiará tal cambio o la situación será tan mala como lo es hoy, dado que las tablas y los índices ya son lleno de datos "aleatorios"? – Eyvind