benefícios de restrição SQL Server Chave Estrangeira
-
06-07-2019 - |
Pergunta
Estamos projetando um banco de dados em que eu preciso considerar alguns FK (chave estrangeira) restrições. Mas não se limita a estruturação formal e normalização. Nós ir para ele apenas se fornece qualquer desempenho ou escalabilidade benefícios.
Eu estive passando por alguns artigos interessantes e googling para benefícios práticos. Aqui estão alguns links:
http://www.mssqltips.com/tip.asp?tip=1296
Eu queria saber mais sobre os benefícios do FK (além da estruturação formal e a famosa cascata de exclusão \ update).
-
FK não são 'indexados' por padrão, então quais são as considerações durante a indexação um FK?
-
Como lidar com campos anuláveis ??que são mapeadas como chave estrangeira? - Isso é permitido
-
Além de indexação, isso ajuda na otimização de planos de consulta de execução em SQL-Servidor?
Eu sei que há mais, mas eu prefiro especialistas falam sobre isso. Por favor me orientar.
Solução
- As chaves estrangeiras não fornecem desempenho ou escalabilidade benefícios.
- As chaves estrangeiras impor a integridade referencial. Isso pode proporcionar um benefício prático levantando um erro se alguém tentou linhas de exclusão da tabela pai em erro.
- As chaves estrangeiras não são indexadas por padrão. Você deve índice suas chaves estrangeiras colunas, pois isso evita uma varredura da tabela na tabela filho quando você excluir / atualizar sua linha pai.
- Você pode fazer um anulável coluna de chave estrangeira e inserção nula.
Outras dicas
O principal benefício é que seu banco de dados não vai acabar inconsistente se o seu código de cliente de buggy tenta fazer algo errado. As chaves estrangeiras são um tipo de 'restrição', então é assim que você deve usá-los.
Eles não têm qualquer benefício "funcional", eles não vão otimizar nada. Você ainda tem que criar índices se, etc. E sim, você pode ter valores NULL em uma coluna que é uma chave estrangeira.
FK manter seus dados consistente. É isso aí. Esta é a principal vantagem. restrições FK não irá fornecer-lhe qualquer ganho de desempenho.
Mas, a menos que tenha denormalized na estrutura propósito db, eu recomendo que você use restrições FK. A principal razão -. Consistência
Eu li pelo menos um exemplo na net onde foi mostrado que Foreign Keys fazer melhorar o desempenho porque o otimizador não tem que fazer verificações adicionais em tabelas porque sabe de dados atende a determinados critérios já vencidos ao FK. Desculpe eu não tenho um link, mas o blog deu saída detalhada dos planos de consulta para provar isso.
Como mencionado, eles são para a integridade dos dados. Qualquer desempenho "perda" seria completamente exterminada pelo tempo necessário para dados de correção quebrado.
No entanto, poderia haver um benefício de desempenho indireta.
Para o SQL Server, pelo menos, as colunas na FK devem ter o mesmo tipo de dados em cada lado. Sem uma FK, você poderia ter um pai nvarchar e uma criança varchar por exemplo. Quando você juntar os 2 mesas, você vai ter um conversões de tipo de dados que podem matar o desempenho.
Exemplo: diferentes comprimentos VARCHAR causando um questão