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.

Foi útil?

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.

restrições

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top