Guest Marcos Berwanger Postado Outubro 9, 2007 Denunciar Share Postado Outubro 9, 2007 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 More sharing options...
0 Denis Courcy Postado Outubro 9, 2007 Denunciar Share Postado Outubro 9, 2007 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 cinner join Pedidos p on c.idCategoria = p.idcategoriawhere 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.attDenis CourcyDenis Courcy Link para o comentário Compartilhar em outros sites More sharing options...
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