Beruflich Dokumente
Kultur Dokumente
no MySql
Crcia Felcio
Exemplo
SELECT BENCHMARK(1000000,(select
sum(valor_curso) from cursos)) ;
select benchmark(1000000,(select avg(valor_curso)
from cursos));
A funoBENCHMARK()executa a
expressoa quantidade de vezes
informada
Usada para medir a velocidade em que o
mysql executa a expresso
Plano de execuo
Otimizador de consultas
Otimizador de Consultas
usurio
SQL Parser
Transforma em Algebra
Plano cannico
Cria planos alternativos
Otimizador
Planos alternativos
Estima custos
Plano de execuo
Cache
Cache de dados
Cache de indices
Cache de consultas
Plano de Execuo
explain
select a.*
from alunos a, cursos c
where c.cod_curso=a.cod_curso
and c.nome_curso=Sistemas para Internet;
Plano de Execuo
Plano de Execuo
Type:
Ocorre quando no h ndices para ser usado ou quando o mysql decide que a
varredura na tabela ter um custo menor que a utilizao de indices
eq_ref: Um indice ser usado para recuperar as linhas da tabela que casam com as
linhas fornecidas por um select executado anteriormente
Indica que o indice utilizado uma chave primria ou um campo unique, e que
todas as partes do indice foram utilizadas
ref_or_null: Funciona como o ref exceto pelo fato que a condio tambm inclui
uma busca por valores nulos.
index merge: Ocorre quando o MySQL faz a juno de vrios ndices para chegar no
resultado
Plano de Execuo
Plano de Execuo
Analisando consultas
Campo rows
Analisando consultas
Utilizando subconsulta
Utilizando juno de tabela
Analisando consultas
explain select * from alunos where cod_curso
in(select cod_curso from cursos) ;
explain select a.* from alunos a ,cursos c
where a.cod_curso=c.cod_curso;
Analisando Consultas
Analisando consultas
Analisando Consultas
Explain
select a.* from alunos a STRAIGHT_JOIN
cursos c where a.cod_curso=c.cod_curso;
O STRAIGHT_JOIN fora o otimizador a
utilizar a ordem estabelecida na consulta
Dessa forma, teremos o mesmo resultado
da consulta com subquery
Analisando Consultas
Outras possibilidades
USE INDEX
FORCE INDEX
IGNORE INDEX
Analisando consultas
Exemplos:
explain
select a.* from alunos a , cursos c Use INDEX(nome_curso_idx)
where c.cod_curso=a.cod_curso
and c.nome_curso='Ciencia da Computacao';
explain
select a.*
from alunos a FORCE INDEX(cod_curso), cursos c
where c.cod_curso=a.cod_curso
and c.nome_curso='Ciencia da Computacao';
explain
select a.*
from alunos a IGNORE INDEX(cod_curso), cursos c
where c.cod_curso=a.cod_curso
and c.nome_curso='Ciencia da Computacao';
Exerccio
Utilizando subconsulta
Utilizando juno de tabelas, sendo a tabela
alunos a primeira da clusula from
Inserindo indices
explain
select a.*
from alunos a, cursos c
where c.cod_curso=a.cod_curso
and c.nome_curso=' Sistemas para Internet
';
Inserindo Indices
Inserindo Indices
explain
select a.*
from alunos a, cursos c
where c.cod_curso=a.cod_curso
and c.nome_curso='Sistemas para Internet';
Inserindo Indice
Exerccios
Exerccios
explain
select * from alunos force
index(dt_nasc_idx) where
date_sub(current_date,interval 18
year)<dt_nasc
Performance de Insert
Conexo
Enviar o comando de insero para o
servidor
Analisar o comando
Inserir o registro
Inserir os ndices
Fechar
Performance de Insert
Performance de Insert
LOCK TABLES cursos alunos WRITE;
Insert into
cursos(nome_curso,sigla_curso)
values ('Decorao', 'DEC');
Insert into
cursos(nome_curso,sigla_curso)
values (Filosofia', 'FILO');
Exerccio
Exerccio