Tenemos una gran mesa [MyTable]
que en la actualidad tiene tanto una Primary Key
, y una Unique Non Clustered Index
en la misma columna ( [KeyColumn]
). El índice U NC también tiene columnas de cobertura adicionales.
Tener PK e índice NC único en las mismas columnas parece redundante, por lo que estaba considerando eliminar la clave primaria y, en su lugar, usar el índice único no agrupado para propósitos de integridad referencial.
Tenga en cuenta que la tabla está agrupada por otra columna por completo.
es decir, tenemos:
ALTER TABLE [MyTable]
ADD CONSTRAINT [PK_MyTable]
PRIMARY KEY NONCLUSTERED ([KeyColumn])
GO
Y
CREATE UNIQUE NONCLUSTERED INDEX [IX_MyTable_SomeIndex]
ON [MyTable] ([KeyColumn])
INCLUDE ([Column1], [Column2])
GO
Hasta donde sé, no es posible agregar columnas de cobertura a una Clave primaria, así que tengo la intención de hacer:
- Descarte las restricciones de clave externa dependientes de
MyTable.KeyColumn
- Suelta la clave primaria por
MyTable.KeyColumn
completo - Vuelva a agregar las claves externas a la tabla (es decir, RI se aplicará a través de
MyTable.KeyColumn
)
La única implicación que se me ocurre al hacer esto es que no obtendremos el símbolo de la llave visual en nuestros diagramas ERD, y que la densidad del índice (hoja) será menor debido a las columnas incluidas.
He leído /programming/487314/primary-key-or-unique-index y estoy contento con los aspectos de integridad y rendimiento de hacer esto.
Mi pregunta es: ¿es defectuoso este enfoque?
Edite lo que estoy tratando de lograr : optimización del rendimiento y limpieza de primavera . Al eliminar el PK o un índice, se necesitarán menos páginas para mis índices = escrituras más rápidas, además de beneficios de mantenimiento / operativos, es decir, un índice menos para mantener desfragmentado, etc.
Para poner algunos antecedentes a esto, nunca antes había tenido una tabla a la que se haga referencia, sin una PK. Sin embargo, el hecho de que se haya agregado un índice NC con columnas de cobertura a la tabla significa que necesito adaptar mi pensamiento.