2
respostas

[DÚVIDA] [QUERY SPEED]

Utilizei a seguinte query no exemplo da aula:

CREATE VIEW `vw_relatorio_sabores` AS
SELECT TP.SABOR, YEAR(NF.DATA_VENDA) AS data_venda, SUM(INF.QUANTIDADE) AS quantidade
FROM tabela_de_produtos AS TP
INNER JOIN itens_notas_fiscais AS INF ON TP.CODIGO_DO_PRODUTO = INF.CODIGO_DO_PRODUTO
INNER JOIN notas_fiscais AS NF ON INF.NUMERO = NF.NUMERO
GROUP BY TP.SABOR, YEAR(NF.DATA_VENDA)
HAVING data_venda = 2016
ORDER BY quantidade DESC;

CREATE VIEW `vw_total_vendas_2016` AS
SELECT YEAR(NF.DATA_VENDA) AS data_venda, SUM(INF.QUANTIDADE) AS quantidade
FROM tabela_de_produtos AS TP
INNER JOIN itens_notas_fiscais AS INF ON TP.CODIGO_DO_PRODUTO = INF.CODIGO_DO_PRODUTO
INNER JOIN notas_fiscais AS NF ON INF.NUMERO = NF.NUMERO
GROUP BY YEAR(NF.DATA_VENDA)
HAVING data_venda = 2016
ORDER BY quantidade DESC;

SELECT VW1.SABOR, VW1.data_venda, VW1.quantidade, 
ROUND((VW1.quantidade/VW2.quantidade) * 100, 2) AS participacao
FROM vw_relatorio_sabores AS VW1, vw_total_vendas_2016 AS VW2
ORDER BY participacao DESC;

Observe que criei duas VIEWS e no fim utilizei um CROSS JOIN. Esta prática é recomendável? Aceleraria a query? Desde já agradeço.

2 respostas

Olá Bruno, tudo bem?

Peço desculpas pela demora no retorno.

Não temos como afirmar exatamente se a forma como você está executando a consulta é menos custosa para o banco de dados, pois, é preciso levar em consideração outros pontos, como a quantidade de dados a serem percorridos na tabela, a quantidade de dados a serem retornados, como o MySQL está realizando a busca internamente nas tabelas, se a sua tabela tem ou não índices.

Este é um ponto muito importante ao se trabalhar com banco de dados Bruno, identificar possíveis consultas que são mais custosas para o banco de dados. E o MySQL disponibiliza um recurso, que pode idenificar se a sua query é ou não custosa para o banco de dados, que é utilizando o plano de execução.

O plano de execução, mostra o custo da consulta para o banco de dados, mostra a ordem de execução da query e indica sugestões de como você pode melhorar a sua consulta. Mas não se preocupe Bruno, na nossa formação de MySQL, temos um curso voltado apenas para administração do banco de dados, que é o Curso de Administração do MySQL: Segurança e otimização do banco, onde o instrutor explica e mostra como você pode utilizar o plano de execução. Mas indico que você continue a seguir a ordem dos cursos da nossa formação de MySQL.

Achei muito legal a forma como você utilizou VIEWS e o CROSS JOIN para realizar este exercício, você está indo muito bem Bruno :).

Continue assim, qualquer dúvida é só falar e bons estudos!

Muito obrigado pela indicação.