Firebird - Chaves Estrangeiras vs Indices
30/06/2015
0
Estou analisando o banco de dados de uma empresa e vi que, embora tenha vinculo entre as tabelas, ele não criou nenhuma chave estrangeira para elas. Em alguns casos que os selects com Join começaram a ficar lentos, ele só criou um Índice no campo da tabela.
Quando questionei isso ao cliente, o mesmo me disse que era melhor deixar desse jeito do que criar as chaves estrangeiras, pois o índice era "mais rápido".
Minha dúvida é: A Chave Estrangeira já cria um Índice na tabela, correto? Esse "Índice" seria pior mesmo que um Índice comum?
Teria algum outro motivo para evitar o uso das Chaves Estrangeiras?
Obrigado.
Diego Martins
Post mais votado
30/06/2015
agora com relacao aos indices dependendo do volume de dados da tabelas e do select que é feito vc tem q criar indices para que as consultas fiquem mais rapidas. so nao pode é criar indice pra coluna da tabela pois as inclusoes e alteracoes serao muito lentas.
procure so PLAN do firebird que vai aprender como criar indices mais uteis.
Dorivan Sousa
Mais Posts
30/06/2015
Alan Mario
30/06/2015
Dorivan Sousa
30/06/2015
Dorivan Sousa
01/07/2015
Diego Martins
Vou tentar melhorar minha dúvida com um exemplo prático do que acontece:
Tabela A -> Clientes (IdCliente Integer, Nome Varchar, etc...)
Tabela B -> Avisos (IdAviso Integer, FK_IdCliente Integer, Assunto Varchar, etc...)
1 Cliente poderá ter vários avisos
Pela regra de relacionamentos e estrutura de bancos, o campo FK_IdCliente deveria ser Chave Estrangeira com Cliente(IdCliente).
Ao invés disso, eles criaram um Indice (FK_IdCliente) acusando de que a Chave Estrangeira atrapalha a performance nesse caso.
Minha dúvida é: qual a vantagem / desvantagem "REAL" em usar um caso ou outro.
Obs: Não só em Firebird, as vezes é bom abstrair o conhecimento a outros pontos.
Obrigado
01/07/2015
Dorivan Sousa
01/07/2015
Alan Mario
Só imagino uma grande quantidade de consultas nesses caso, me parece que deve ter um cuidado especial.
Clique aqui para fazer login e interagir na Comunidade :)