Eu tenho uma tabela com uma chave primária composta (composta por 4 colunas) que é usada para garantir que nenhuma duplicata seja inserida na tabela. Agora estou precisando de uma nova tabela que precisará referenciar as chaves nesta tabela como chaves estrangeiras.
Minha pergunta é qual abordagem é mais eficiente para velocidades de pesquisa:
1) Crio a nova tabela, incluindo todas as 4 colunas, e as refiro todas em uma chave estrangeira.
ou
2) Crie uma nova coluna de identidade na tabela Chave Primária e use-a como uma chave estrangeira na nova tabela.
Espera-se que esse banco de dados retenha uma quantidade muito grande de dados, então eu o criei até agora com o objetivo de minimizar a quantidade de dados mantidos em cada tabela. Com isso em mente, a opção 2 seria a melhor abordagem, pois salvarei 2 colunas int e uma coluna datetime para cada linha, mas quero evitar aumentar o tempo de pesquisa, se desnecessário.
INT IDENTITY
) nesse caso - torna a referência e a junção dessa tabela muito mais fácil. Para evitar duplicatas, coloque uma restrição UNIQUE nessas quatro colunas. Também: chaves primárias estreitas são muito melhor por razões de desempenho (se eles são usados como chave de cluster)Respostas:
O custo do uso de um PK inteiro sintético simples é pequeno e o benefício no seu caso provavelmente seria bastante considerável.
A única desvantagem material que vem à mente é que você pode perder o desempenho em consultas que se beneficiaram do armazenamento em cluster no PK composto. Se você acha que isso é significativo, continue o agrupamento na chave candidata composta, mas coloque a PK na chave sintética.
fonte
Como tantas vezes no mundo SQL, a resposta é: "Depende".
Dê uma olhada nesta pergunta para alguns indicadores: chaves naturais fornecem desempenho mais alto ou mais baixo no SQL Server que as chaves inteiras substitutas?
Há casos em que há uma melhora no desempenho ao usar chaves naturais como chaves estrangeiras. No entanto, na maioria dos casos, você será melhor com chaves menores (leia-se: chaves substitutas).
Se você introduzir essa coluna IDENTITY, eu a tornaria a Chave Primária e alteraria as colunas "naturais" para uma Restrição Única.
fonte