Tenemos una base de datos heredada que es un servidor sql db (2005 y 2008).Sql Server Legacy Database To Clustered index o no
Todas las claves principales en las tablas son UniqueIdentifiers.
Las tablas actualmente no tienen un índice agrupado creado en ellas y estamos teniendo problemas de rendimiento en tablas con solo 750k registros. Esta es la primera base de datos en la que he trabajado con identificadores únicos como la única clave principal y nunca he visto que el servidor sql sea tan lento con la devolución de datos.
No deseo crear un índice agrupado en el identificador único ya que no son secuenciales y, por lo tanto, desacelerarán las aplicaciones cuando se trata de insertar datos.
No podemos eliminar el identificador único ya que se utiliza para fines de gestión de identidad de registro de sitio remoto.
Pensé en agregar una gran columna de identidad entera a las tablas y crear el índice agrupado en esta columna e incluir la columna de identificador único.
es decir
int identidad - La primera columna para mantener la pieza de inserción acelera identificador único - Para garantizar la aplicación sigue funcionando como se espera.
El objetivo es mejorar la consulta de identidad y el rendimiento de la consulta de tablas unidas.
Q1: ¿Mejorará el rendimiento de la consulta de la base de datos o se ralentizará?
Q2: ¿Hay alguna alternativa a esto que no haya enumerado?
Gracias Pete
Editar: El rendimiento de los problemas están en la recuperación de datos de forma rápida a través de sentencias de selección, especialmente si algunos de los más "transaccional/cambiantes" tablas se unen entre sí.
Edición 2: El combinaciones entre tablas son por lo general lo que entre la clave principal y clave externa, para las tablas que tienen las claves externas que se incluyen en el índice no agrupado para proporcionar un índice más cubriente.
Todas las tablas no tienen otros valores que proporcionen un buen índice agrupado.
Me inclino más por agregar una columna de identidad adicional en cada una de las tablas de alta carga y luego incluir la columna Guid PK actual dentro del índice agrupado para proporcionar el mejor rendimiento de consulta.
Editar 3: Me gustaría estimar que el 80% de las consultas se realizan solo en claves primarias y externas a través del mecanismo de acceso a datos. En general, nuestro modelo de datos tiene objetos cargados perezosos que realizan la consulta cuando se accede, estas consultas usan el identificador de objetos y la columna PK. Tenemos una gran cantidad de consultas de exclusión/inclusión de datos impulsadas por el usuario que utilizan las columnas de clave externa como un filtro basado en los criterios de para que el tipo X excluya los siguientes identificadores. El 20% restante es donde las cláusulas en Enum (int) o columnas de rango de fechas, muy pocas consultas basadas en texto se realizan en el sistema.
Siempre que sea posible, he agregado índices de cobertura para cubrir las consultas más pesadas, pero todavía estoy decepcionado por el rendimiento. Como bluefooted dice que los datos se almacenan como un montón.
¿Actualmente tiene un índice no agrupado en los identificadores únicos? – jwsample
Sí, tenemos índices no agrupados en los identificadores únicos. – Peter
Dado que tiene al menos un índice en esa columna, ya está incurriendo en una penalización de rendimiento en la inserción. Dependiendo de la estructura de la tabla, puede ser capaz de soltar el índice no agrupado y cambiar a agrupado con poco impacto a lo que está viendo actualmente. – jwsample