Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · NoticiasLinux · SoftwareLivre.org · UnderLinux · BestLinux
» Screenshot
Linux: Rede Samba
Por mestrelee



» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha

» Wallpaper


Artigo

SQL Dicas & Truques (parte 2)
Linux user
fabio
12/10/2003
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.
Por: Fábio Berbert de Paula
[ Hits: 26517 ]
Conceito: 9.0   2 voto(s)2 voto(s)2 voto(s)2 voto(s)2 voto(s) + quero dar nota ao artigo

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

Leitura recomendada

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
CAPTCHA
[ Recarregar imagem ]

Digite o código acima:

  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.