Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Há um impacto severo no desempenho ao usar chaves estrangeiras no SQL Server?


Há um pequeno impacto no desempenho em inserções, atualizações e exclusões porque o FK precisa ser verificado. Para um registro individual, isso normalmente seria tão pequeno a ponto de ser imperceptível, a menos que você comece a ter um número ridículo de FKs associados à tabela (claramente, leva mais tempo para verificar 100 outras tabelas do que 2). Isso é bom, não ruim, pois bancos de dados sem integridade não são confiáveis ​​e, portanto, inúteis. Você não deve trocar integridade por velocidade. Esse impacto no desempenho geralmente é compensado pela melhor capacidade de otimizar os planos de execução.

Temos um banco de dados de tamanho médio com cerca de 9 milhões de registros e FKs em todos os lugares em que deveriam estar e raramente notamos um impacto no desempenho (exceto em uma tabela mal projetada que possui mais de 100 chaves estrangeiras, é um pouco lento excluir registros disso como todos deve ser verificado). Quase todos os dba que conheço que lidam com bancos de dados grandes de terabytes e uma verdadeira necessidade de alto desempenho em grandes conjuntos de dados insistem em restrições de chave estrangeira porque a integridade é fundamental para qualquer banco de dados. Se as pessoas com bancos de dados do tamanho de terabytes podem arcar com o desempenho muito pequeno, você também pode.

Os FKs não são indexados automaticamente e, se não forem indexados, isso pode causar problemas de desempenho.

Honestamente, eu faria uma cópia do seu banco de dados, adicionaria FKs indexados corretamente e mostraria a diferença de tempo para inserir, excluir, atualizar e selecionar dessas tabelas em comparação com o mesmo do seu banco de dados sem os FKs. Mostre que você não causará um impacto no desempenho. Em seguida, mostre os resultados das consultas que mostram registros órfãos que não têm mais significado porque o PK ao qual estão relacionados não existe mais. É especialmente eficaz mostrar isso para tabelas que contêm informações financeiras ("Temos 2.700 pedidos que não podemos associar a um cliente" fará com que a administração fique atenta).