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.

[ Hits: 47.324 ]

Por: Fábio Berbert de Paula em 12/10/2003 | Blog: https://fabio.automatizando.dev


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:

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:

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Otimizando suas consultas SQL
   3. Formatando resultados
   4. Conclusão
Outros artigos deste autor

Ativando o Modo Noturno via Linha de Comando no GNOME/Wayland

Paginação de resultados em PHP/MySQL

Tasker - Como fazer um ANDROID falante

Criando um contador de downloads com PHP e MySQL

Viva o Linux 2008 - Site com cara e recursos novos!

Leitura recomendada

Instalando o MySQL no Slackware

Gerenciando banco de dados com MySQL (Parte 1)

Administrando bancos MySQL com phpMyAdmin

OcoMon 2.0RC6 no OpenSUSE 11.2 com PHP5 + MySQL5 + Apache2 com correção de acentuação

Sincronização segura entre bancos de dados MySQL utilizando SJA

  
Comentários
[1] Comentário enviado por coyote53 em 13/10/2003 - 19:11h

Eae? Blz?
è 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.

[2] Comentário enviado por fabio em 15/10/2003 - 14:13h

Te explicar de forma reduzida sobre como colocar uma página em PHP e MySQL no ar do zero e falar sobre a segurança das mesmas é praticamente impossível. Se tiver uma dúvida segmentada, manda ela um pouco mais detalhada, pois não deu pra saber em que ponto você parou ao tentar colocar a página online. Se você estiver começando do zero mesmo, te aconselho dar uma passada no manual do PHP: www.php.net ou até mesmo comprar um livro direcionado para desenvolvedores PHP e MySQL, que em qualquer livraria tem aos montes.

[]´s
Fábio

[3] Comentário enviado por sgs_1982 em 26/08/2004 - 10:32h

Olá Fabio,
Queria saber se o seguinte comando pode ser melhorado :

select data_ref_requerimento, num_requerimento from os where num_requerimento <> 0 and num_requerimento not in ( select num_requerimento from requerimento where requerimento.data_ref_requerimento = os.data_ref_requerimento)

As tabelas tem + ou - 100.000 registros.

Se vc poder me ajudar, agradeço muito ...

Se puder me retornar, meu email é : samuel@mgfinformatica.com.br

Atenciosamente,

Samuel


[4] Comentário enviado por albertomarlboro em 21/01/2008 - 10:18h

Muito bom Fábio, obrigado por compartilhar !


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts