Perfomance em MySQL
Click here to load reader
-
Upload
ellison-leao -
Category
Entertainment & Humor
-
view
675 -
download
3
Transcript of Perfomance em MySQL
![Page 1: Perfomance em MySQL](https://reader037.fdocumentos.com/reader037/viewer/2022100603/5596da371a28abd06a8b45ac/html5/thumbnails/1.jpg)
Perfomance em MySQLEllison Leão
![Page 2: Perfomance em MySQL](https://reader037.fdocumentos.com/reader037/viewer/2022100603/5596da371a28abd06a8b45ac/html5/thumbnails/2.jpg)
Conteúdo
● EXPLAIN neles! ● MySQL Pivot● Boas práticas ● Baseado em fatos reais
![Page 3: Perfomance em MySQL](https://reader037.fdocumentos.com/reader037/viewer/2022100603/5596da371a28abd06a8b45ac/html5/thumbnails/3.jpg)
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](https://reader037.fdocumentos.com/reader037/viewer/2022100603/5596da371a28abd06a8b45ac/html5/thumbnails/4.jpg)
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](https://reader037.fdocumentos.com/reader037/viewer/2022100603/5596da371a28abd06a8b45ac/html5/thumbnails/5.jpg)
mysql> EXPLAIN SELECT pkey FROM exams
![Page 6: Perfomance em MySQL](https://reader037.fdocumentos.com/reader037/viewer/2022100603/5596da371a28abd06a8b45ac/html5/thumbnails/6.jpg)
● 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](https://reader037.fdocumentos.com/reader037/viewer/2022100603/5596da371a28abd06a8b45ac/html5/thumbnails/7.jpg)
Um pouco mais complexo
exemplo de explain em uma consulta no database eadsesipr
![Page 8: Perfomance em MySQL](https://reader037.fdocumentos.com/reader037/viewer/2022100603/5596da371a28abd06a8b45ac/html5/thumbnails/8.jpg)
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](https://reader037.fdocumentos.com/reader037/viewer/2022100603/5596da371a28abd06a8b45ac/html5/thumbnails/9.jpg)
mysql > select * from exams;
![Page 10: Perfomance em MySQL](https://reader037.fdocumentos.com/reader037/viewer/2022100603/5596da371a28abd06a8b45ac/html5/thumbnails/10.jpg)
E se quisessemos agrupar as notas de cada aluno em apenas uma linha?
![Page 11: Perfomance em MySQL](https://reader037.fdocumentos.com/reader037/viewer/2022100603/5596da371a28abd06a8b45ac/html5/thumbnails/11.jpg)
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](https://reader037.fdocumentos.com/reader037/viewer/2022100603/5596da371a28abd06a8b45ac/html5/thumbnails/12.jpg)
Resultado
![Page 13: Perfomance em MySQL](https://reader037.fdocumentos.com/reader037/viewer/2022100603/5596da371a28abd06a8b45ac/html5/thumbnails/13.jpg)
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](https://reader037.fdocumentos.com/reader037/viewer/2022100603/5596da371a28abd06a8b45ac/html5/thumbnails/14.jpg)
Boas práticas
![Page 15: Perfomance em MySQL](https://reader037.fdocumentos.com/reader037/viewer/2022100603/5596da371a28abd06a8b45ac/html5/thumbnails/15.jpg)
● 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](https://reader037.fdocumentos.com/reader037/viewer/2022100603/5596da371a28abd06a8b45ac/html5/thumbnails/16.jpg)
A query a seguir é baseada em fatos reais...
![Page 17: Perfomance em MySQL](https://reader037.fdocumentos.com/reader037/viewer/2022100603/5596da371a28abd06a8b45ac/html5/thumbnails/17.jpg)
Perguntas?:)
![Page 18: Perfomance em MySQL](https://reader037.fdocumentos.com/reader037/viewer/2022100603/5596da371a28abd06a8b45ac/html5/thumbnails/18.jpg)
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/