Perfomance em MySQL

Post on 04-Jul-2015

675 views 3 download

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/