Ir para conteúdo
Fórum Script Brasil
  • 0

Index (índice) Chave Estrangeira (foreign Key)


Guest Marcos Berwanger

Pergunta

Guest Marcos Berwanger

Para todos os relacionamentos, chaves estrangeiras, é preciso criar o respectivo índice?

Por exemplo:

Create table Pedidos (

idPedido Int UNSIGNED NOT NULL AUTO_INCREMENT,

idCategoria Int UNSIGNED NOT NULL,

UNIQUE (idPedido),

Index AI_idPedido (idPedido),

Index idx_idCategoria (idCategoria),

Foreign Key (idCategoria) references Categorias (idCategoria) on delete restrict on update restrict,

) ENGINE = InnoDB;

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Neste caso a resposta é SIM.

pois quando se cria este tipo de CONSTRAINT automaticamente o índice é criado.

Porém, não é obrigatória a criação de constraint para todos os tipos de relacionamentos.

A falta de índices pode degradar tremendamente a performance do sistema como um todo conforme as tabelas forem crescendo.

Por boa prática sempre uso índice tanto para a chave estrangeira quanto para os atributos (campos) utilizados em cláusulas where.

Uma exemplificação disso seria saber qual categoria está em que pedido. Então teríamos, sabendo que temos 100 categorias cadastradas na tabela de categorias e 10000 pedidos cadastrados na tabela de pedidos:

Select * from idcategoria c

inner join Pedidos p on c.idCategoria = p.idcategoria

where c.idCategoria = 5;

Sua pesquisa demandaria 10000 buscas em seu pior caso, se não houver índice, pois geraria o que chamamos de TABLE SCAN (uma pesquisa em toda a tabela de pedidos para que o idCategoria = 5 fosse encontrado nesta tabela.

Pense no funcionamento de um índice conforme explico abaixo:

Suponha que em uma tabela haja 100 registros e que o ID dela varia de 1 a 100.

Sem indice o meu pior caso seria achar o registro com id = 50 pois tanto faria varrer a tabela de baixo para cima quanto de cima para baixo, a quantidade de registros lidos seria praticamente a mesma.

Porém, se tenho índice e quero achar o o registro com id = 45, por exemplo, o sistema efetuaria, em tese, 7 leituras para achar a resposta. (obs. utilizei o método de pesquisa binária´para encontrar este número mágico).

Pense bem quando cogitar não usar índices.

att

Denis Courcy

Denis Courcy

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...