SQL Dicas & Truques (parte 2)
Este artigo é a continuação da série que nos apresenta dicas e truques que podem ser usados nas consultas SQL. Nesta segunda parte vamos descobrir como fazer para otimizar nossas consultas ao banco de dados MySQL, assim como algumas funções que irão nos ajudar a deixar o código-fonte do programa mais limpo e agilizar nossa vida.
Parte 2: Otimizando suas consultas SQL
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:
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)
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)
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:
è o seguinte estou com um grande problema para mim sei que para voce é muito facil.
Criei uma ágina e mysql e php mas como pnho ela no ar?
Meu servidor é linux, sei poquisimo de linux.
E eu tembem queria saber mais sobre a segurança de paginas na WEB.
queria mais algumas dicas e toques que fiquei sabendo que vc entende.
ok
Desde já agradeço.