quinta-feira, 3 de abril de 2014

MySQL Explique & SQL_NO_CACHE

Original post: http://anothermysqldba.blogspot.com/2014/04/mysql-explain-sqlnocache.html

Então, hoje eu estava ajudando alguém com o seu desempenho de banco de dados e correu algumas consultas mal escritos. Agora, certamente, todo mundo comete erros, o objetivo é fazer tudo o que puder para evitá-los.

Assim, apenas um par de dicas úteis para fazer antes de deixar uma consulta solto em seu ambiente.

Sempre executar a consulta via explicar primeiro. Algo tão simples como fazer explicar primeiro confirmará sem erros (já que ele não será executado), e permitir que você otimizar a consulta.
Várias ligações já existem sobre como usar explicar:
O objetivo é simples. Você quer chaves válidas nas possible_keys e chaves (não nulos) e quando se trata de key_len você não quer que cada mesa para ser 100s de linhas. Se você pode obter o primeiro key_len a ser 200 (apenas um número que eu escolhi como exemplo), então o seguinte para ser 5,4,3,2,1 e não mais 200, em seguida, sua consulta deve correr bem. Essa é uma afirmação muito simplista e de alto nível e eu sugiro que você revise os links listados para entender Explique mais. A consulta que eu vi hoje tinha 5 + junta e um sub-select (via uma junção foi melhor no onde declaração) e 200 + linhas para cada key_len. Alguns ajustes podem permitir sua consulta a cair entre 200 segundos para 1 segundo ou menos. Sempre, sempre, sempre se explicar.

A próxima dica, tentar testar suas consultas com SQL_NO_CACHE. Isso permite que você teste a consulta real e otimizá-lo da melhor maneira que puder. Uma vez que ela se torna em cache (se ele vai ser), então ele só vai correr muito mais rápido para você.
Uma última nota ... Dê uma olhada nas dicas de desempenho de SQL para MySQL que existiam no local forja, mas agora estão em - https://wikis.oracle.com/pages/viewpage.action?pageId=27263381