abril 2008
D S T Q Q S S
    mai »
 12345
6789101112
13141516171819
20212223242526
27282930  

Optimizações simples e eficazes no MySQL

Esses dias encontrei por acaso uma postagem sobre optmização de MySQL e as publico aqui por ter gostado da simplicidade e eficiencia.

Pesquisa por palavra exata

Muito rápido:

SELECT * FROM TABELA WHERE MATCH ('campo') AGAINST ('Palavra')

Rápido:

SELECT * FROM TABELA WHERE MATCH ('campo') AGAINST ('+Palavra' IN BOOLEAN MODE)

Lento:

SELECT * FROM TABELA WHERE campo RLIKE '(^| +)Palavra($| +)'

Lento:

SELECT * FROM TABELA WHERE campo RLIKE '([[:space:]]|[[:<:]])Palavra([[:space:]]|[[:>:]])'

Pesquisa por conteúdo

Muito rápido:

SELECT * FROM TABELA WHERE MATCH ('campo') AGAINST ('Palavra*' IN BOOLEAN MODE)
[sql]

Rápido:
[sql]
SELECT * FROM TABELA WHERE campo LIKE 'Palavra%'

Lento:

SELECT * FROM TABELA WHERE MATCH ('campo') AGAINST ('*Palavra*' IN BOOLEAN MODE)

Lento:

SELECT * FROM TABELA WHERE campo LIKE '%Palavra%'

Número de registros

Muito rápido:

SELECT SQL_CALC_FOUND_ROWS * FROM TABELA WHERE Condições LIMIT 0, 10
SELECT FOUND_ROWS()

Rápido:

SELECT * FROM TABELA WHERE Condições LIMIT 0, 10
SELECT COUNT(*) FROM TABELA WHERE Condições

Muito lento:

$result = mysql_query ( "SELECT * FROM TABELA", $link);
$num_rows = mysql_num_rows ( $result);

Joins

Utilize INNER JOIN quando você deseja que a tabela unida possua apenas campos com registros que você expecificar no JOIN. Utilize LEFT JOIN quando não importar se os campos pesquisados possuem dados ou não.

SELECT * FROM produtos INNER JOIN fornecedores ON fornecedores.IDFornecedor = produtos.IDFornecedor

Retorna todos os produtos que possuem fornecedor.

SELECT * FROM produtos LEFT JOIN fornecedores ON fornecedores.IDFornecedor = produtos.IDFornecedor WHERE fornecedores.IDFornecedor IS NULL

Retorna todos os produtos que não possuam fornecedor.

Conclusão

Se depois de todas essas dicas você ainda não está satisfeito (pelo menos incentivei alguém!!! hehehe), recomendo uma lida na sessão de optimização do manual do MySQL, que explica muito bem como o MySQL age em cada situação. O manual pode ser encontrado aqui.

Fonte: The Spanner: PHP & MySQL Tips

Envie uma resposta

 

 

 

Você pode utilizar estas tags HTML

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>