Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

leooizepi

Índices MySql

Recommended Posts

Olá,

 

Eu tenho uma tabela defeitos e nela tem mais de 1 milhão de registros será necessário criar alguns índices para turbinar as consultas, no entanto tenho algumas dúvidas, digamos o seguinte se eu utilizar essas 4 querys abaixo, qual seria o(s) indice(s) que eu deveria criar?

 

Query 1:

 

SELECT

campo1, campo2, campo3, campo4

FROM

defeitos

WHERE

campo1 = 'a';

-----------------------------

Query2:

 

SELECT

campo1, campo2, campo3, campo4

FROM

defeitos

WHERE

campo2 = 'b';

------------------------------

Query3:

 

SELECT

campo1, campo2, campo3, campo4

FROM

defeitos

WHERE

campo3 = 'b';

--------------------------------

Query4:

 

SELECT

campo1, campo2, campo3, campo4

FROM

defeitos

WHERE

campo1 = 'a' AND campo2 = 'b' AND campo3 = 'c';

 

 

Andei lendo sobre índices e fala sobre criar índices compostos tipo: indice1(campo1,campo2,campo3), daí ele serviria para a Query4, no entanto tenho dúvidas para as querys 1, 2 e 3, pois se eu criar um índice: indice2(campo1) não atrapalharia a query4?

 

OBS: A minha tabela é InnoDB, pois existe muitos usuário fazendo cadastros e atualizações, não tem como ser MyIsam.

 

Agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Eu tenho uma tabela defeitos e nela tem mais de 1 milhão de registros será necessário criar alguns índices para turbinar as consultas, no entanto tenho algumas dúvidas, digamos o seguinte se eu utilizar essas 4 querys abaixo, qual seria o(s) indice(s) que eu deveria criar?

 

Query 1:

 

SELECT

campo1, campo2, campo3, campo4

FROM

defeitos

WHERE

campo1 = 'a';

-----------------------------

Query2:

 

SELECT

campo1, campo2, campo3, campo4

FROM

defeitos

WHERE

campo2 = 'b';

------------------------------

Query3:

 

SELECT

campo1, campo2, campo3, campo4

FROM

defeitos

WHERE

campo3 = 'b';

--------------------------------

Query4:

 

SELECT

campo1, campo2, campo3, campo4

FROM

defeitos

WHERE

campo1 = 'a' AND campo2 = 'b' AND campo3 = 'c';

 

 

Andei lendo sobre índices e fala sobre criar índices compostos tipo: indice1(campo1,campo2,campo3), daí ele serviria para a Query4, no entanto tenho dúvidas para as querys 1, 2 e 3, pois se eu criar um índice: indice2(campo1) não atrapalharia a query4?

 

OBS: A minha tabela é InnoDB, pois existe muitos usuário fazendo cadastros e atualizações, não tem como ser MyIsam.

 

Agradeço.

 

 

Pode criar os indices nos campos: campo1, campo2 e campo3.

E sim, pode criar o índice composto do campo1+campo2+campo3 tranquilamente

O MySql vai escolher na hora da query qual é o melhor a utilizar, portanto os outros não irão atrapalhar.

 

Mas na duvida pode fazer o teste...

Crie dos dois jeitos e faça testes, se não gostar dos resultados depois você exclui os índices se não gostar da performance

Use um EXPLAIN na frente de suas consultas que o mysql exibe qual índice utilizou pra fazer a busca, ai você vai ver que um não interfere no outro.

 

Vale lembrar que a criação de índices aloca espaco em disco, e em alguns casos podem até piorar as buscas, em outros não ajudam de nada.

Mas para seu caso, pelo tipo das consultas, acho que vai ter um ganho excelente de performance.

 

Abraço e boa sorte

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.