Perfomance em MySQL
Click here to load reader
-
Upload
ellison-leao -
Category
Entertainment & Humor
-
view
675 -
download
3
Transcript of Perfomance em MySQL
Perfomance em MySQLEllison Leão
Conteúdo
● EXPLAIN neles! ● MySQL Pivot● Boas práticas ● Baseado em fatos reais
CREATE TABLE exams ( pkey int(11) NOT NULL auto_increment, name varchar(15), exam int, score int, PRIMARY KEY (pkey) );
Antes de tudo
e mais alguns inserts..
EXPLAIN
● EXPLAIN antes de qualquer consulta, traz as informações de execução da mesma
● Ótima ferramenta para otimização de consultas
mysql> EXPLAIN SELECT pkey FROM exams
● select_type - mostra o tipo de select utilizado. tipos( SIMPLE,PRIMARY, etc..
● table - mostra o nome da tabela de onde vem o resultado (para quando são efetuados JOINs entre tabelas);
● type - tipo de join usado. Do melhor para o pior tipo temos: system, const, eq_ref, ref, fulltext, range, index, all;
● possible_keys - indica quais os índices que o MySQL pode usar para encontrar resultados nesta tabela;
● key - índice usado na consulta, ou NULL caso não tenham sido usados índices;
● key_len - tamanho do índice usado, caso exista;● ref - coluna(s) usada(s) com a key para devolver resultados;● rows - número de registos que o MySQL tem de examinar para
executar a consulta;● extra - informação adicional acerca de como o MySQL vai executar a
consulta. Evite sempre o aparecimento de “using filesort” e “using temporary“.
Um pouco mais complexo
exemplo de explain em uma consulta no database eadsesipr
MySQL Pivot
● Também chamado de Cross-Tabulation
● Agrupamento de vários campos em uma única linha
● Ideal para relatórios com bastante dados
agregados
mysql > select * from exams;
E se quisessemos agrupar as notas de cada aluno em apenas uma linha?
Pivot neles!SELECT name ,SUM(IF(exam=1,score,null)) as nota1 ,SUM(IF(exam=2,score,null)) as nota2 ,SUM(IF(exam=3,score,null)) as nota3 ,SUM(IF(exam=4,score,null)) as nota4 FROM exams GROUP BY name
Resultado
Vantagens
● Organização● Agrega grande quantidade de informação em uma
única linha (gráficos?)
Desvantagens● Query um pouco mais complexa
Boas práticas
● Não seja guloso. Peça apenas o necessário (evite SELECT *);
● Os index são seus amigos ( cuidado com os
excessos - indexes malcriados podem deixar a query mais lenta);
● SEMPRE use o EXPLAIN para dissecar suas
queries e melhorá-las.
● Se puder, evite subconsultas.
A query a seguir é baseada em fatos reais...
Perguntas?:)
Referências● http://weevilgenius.net/2010/09/mysql-explain-reference/● http://en.wikibooks.org/wiki/MySQL/Pivot_table● http://dev.mysql.com/doc/refman/5.0/en/explain.html● http://www.mysqlperformanceblog.com/