Um dos recursos mais poderosos na otimização de consultas SQL é a
criação de índices em suas tabelas. No MySQL, por padrão a consulta às
tabelas é feita de modo seqüencial e isso pode prejudicar e muito o
desempenho de seu banco de dados quando o mesmo começa a tomar proporções
grotescas e volume muito alto de acessos. Para entendermos a diferença
entre uma consulta seqüencial e indexada, vamos a um exemplo prático.
Suponha que temos uma tabela chamada alfabeto e que desejamos encontrar
a letra "P". Podemos então construir a seguinte consulta SQL:
mysql> SELECT letra FROM alfabeto WHERE letra='P';
Para encontrar a letra "P" de forma seqüencial, o MySQL percorrerá a
seguinte lógica:
Posicione o cursor no primeiro registro da tabela:
1> A (A é igual a P? Não, próximo)
2> B (B é igual a P? Não, próximo)
3> C (C é igual a P? Não, próximo)
...
16> P (P é igual a P? Sim, retorne o resultado)
Levamos um total de 16 acessos aos registros da tabela para encontrarmos
o valor desejado.
Agora vamos criar um índice para essa tabela sabendo que a coluna
letra, do tipo CHAR(1), é a que nos servirá para encontrar dados:
mysql> CREATE INDEX ind_letra ON alfabeto (letra(1));
No comando acima criamos um índice chamado ind_letra na tabela
alfabeto. Este índice está baseado na coluna letra e tem
o tamanho de 1 caractere. Agora que temos o índice, vamos usá-lo em
nossa consulta ao banco de dados:
mysql> SELECT letra FROM alfabeto USE INDEX (ind_letra) WHERE letra='P';
Note que apenas adicionamos a sintaxe USE INDEX (nome_do_índice)
à consulta. Dessa forma, eis o caminho lógico que o MySQL percorrerá para
encontrar a letra desejada:
Posicione o cursor no primeiro índice da tabela (que é a letra do meio
do alfabeto):
1> M (M é igual a P? Não, é menor. Então vamos ao próximo índice)
Agora sobraram as letras maiores que M. Qual é o ponto médio entre M e Z?
2> S (S é igual a P? Não, é maior. Então vamos ao próximo índice)
Agora sobraram as letras menores que S e maiores que M. Qual é o ponto médio entre M e S?
3> P (P é igual a P? Sim, retorne o resultado)
Pasmem, usando a lógica de índices o MySQL levou 3 acessos para encontrar
a letra P. Gostaram da idéia? Que tal implementar índices em suas tabelas?
Para saber mais sobre índices, leia o capítulo do Manual do MySQL que
fala sobre isso: