Perfomance em MySQL

18

Click here to load reader

Transcript of Perfomance em MySQL

Page 1: Perfomance em MySQL

Perfomance em MySQLEllison Leão

Page 2: Perfomance em MySQL

Conteúdo

● EXPLAIN neles! ● MySQL Pivot● Boas práticas ● Baseado em fatos reais

Page 3: Perfomance em MySQL

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..

Page 4: Perfomance em MySQL

EXPLAIN

● EXPLAIN antes de qualquer consulta, traz as informações de execução da mesma

● Ótima ferramenta para otimização de consultas

Page 5: Perfomance em MySQL

mysql> EXPLAIN SELECT pkey FROM exams

Page 6: Perfomance em MySQL

● 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“.

Page 7: Perfomance em MySQL

Um pouco mais complexo

exemplo de explain em uma consulta no database eadsesipr

Page 8: Perfomance em MySQL

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

Page 9: Perfomance em MySQL

mysql > select * from exams;

Page 10: Perfomance em MySQL

E se quisessemos agrupar as notas de cada aluno em apenas uma linha?

Page 11: Perfomance em MySQL

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

Page 12: Perfomance em MySQL

Resultado

Page 13: Perfomance em MySQL

Vantagens

● Organização● Agrega grande quantidade de informação em uma

única linha (gráficos?)

Desvantagens● Query um pouco mais complexa

Page 14: Perfomance em MySQL

Boas práticas

Page 15: Perfomance em MySQL

● 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.

Page 16: Perfomance em MySQL

A query a seguir é baseada em fatos reais...

Page 17: Perfomance em MySQL

Perguntas?:)

Page 18: Perfomance em MySQL

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/