Eu tenho um banco de dados no qual várias tabelas são definidas com várias colunas UUID formando a chave primária quando elas devem ser definidas como chaves estrangeiras, por exemplo
CREATE TABLE [dbo].[SomeTable](
[SomeTableID] [uniqueidentifier] NOT NULL,
[WorkEntryID] [uniqueidentifier] NOT NULL,
[TimeEntryID] [uniqueidentifier] NOT NULL,
[RateEntryID] [uniqueidentifier] NOT NULL,
...
CONSTRAINT [PK_SomeTable] PRIMARY KEY CLUSTERED
(
[SomeTableID] ASC,
[WorkEntryID] ASC,
[TimeEntryID] ASC,
[RateEntryID] ASC
)
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[SomeTable] ADD CONSTRAINT [DF_SomeTable_SomeTableID] DEFAULT (newsequentialid()) FOR [SomeTableID]
GO
As colunas adicionais deveriam ter sido definidas como Chaves Estrangeiras e em alguns casos foram. Estou assumindo que há implicações de desempenho de ter as colunas adicionais como parte do PK? Há alguma consideração que eu deva estar ciente antes de redefinir o PK para que as tabelas incluam apenas a coluna PK?
O índice clusterizado ideal no SQL Server atende aos seguintes critérios:
Na produção, talvez você não consiga escolher um índice clusterizado que atenda a todos esses critérios, o que é bom. Você só pode fazer o melhor que você pode fazer. Um índice clusterizado de quatro GUIDs é uma escolha incomum. Presumo que atenderá aos dois primeiros critérios, mas não aos outros três. Um impacto no desempenho do índice atual é que os índices não clusterizados ocuparão espaço em disco adicional porque cada um deles armazena uma cópia do índice clusterizado. É por isso que os índices clusterizados são idealmente estreitos.
Com base nas informações fornecidas nesta pergunta, você provavelmente ficará melhor alterando o índice clusterizado para ser apenas a
SomeTableID
coluna. Estou fazendo algumas suposições aqui, mas é improvável que você veja a degradação do desempenho causada por esse switch.Esta resposta abordou índices clusterizados e não chaves primárias porque o índice clusterizado é o que importa para o desempenho, que parece ser o foco desta pergunta. As chaves primárias são para impor a integridade dos dados e as restrições de negócios. Continuar a corresponder as colunas para o índice clusterizado e a chave primária deve funcionar bem nesse caso, a menos que haja um motivo comercial para manter as colunas de chave primária atuais.