Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ricardo Santos Bezerra

tunning

Recommended Posts

Pessoal, bom dia!

Eu tenho uma querie que gera o result em 3seg, a mesma se incluo o campo de data no filtro (é necessário e está nas duas últimas linhas), dá timeout...têm índice em praticamente tudo, já tentei trocar os left join por inner, tentei sem os joins, só com as tabelas separadas por vírgula e os campos de igualdade no where..nada..e o filtro ainda por cima é de um dia só, ou seja, não é quantidade de dados e sim a querie o problema...a querie está em produção sem o filtro por data e, precisa ser incluído esse filtro...obrigado desde já.

 

segue a querie:

SELECT 
rel.id_relatorio
    ,rel.id_relatorio_retorno
    ,rel.data_inclusao  AS Dt_inc
    ,rel.documento
    ,caixa.texto  AS Id_filial
    ,filiais.loja
    ,caixa.valor  AS Caixa
    ,caixa.ativo  AS Ativo
    ,renda.renda_presumida  AS Renda
    ,score.valor_score   AS Valor_score
    ,pessoa.idade  AS Idade
    ,pessoa.situacao  AS Situacao
    ,msg.mensagem  AS Mensagem
    ,backoffice.valor  AS Bckoffice
    ,resultado.valor  AS Resutlado
    ,(CASE WHEN backoffice.valor IS NULL 
THEN
CASE WHEN rel.id_relatorio_retorno IS NULL 
THEN 'PDV-REUSO' 
ELSE 'PDV' 
               END
ELSE
'ATENDIMENTO'
    END) AS Tipo_bckoffice     
FROM
     dec_relatorio rel
        INNER JOIN
     pla_parametros caixa 
ON rel.id_relatorio = caixa.id_relatorio
        INNER JOIN
     pla_carrefour_filiais filiais 
ON caixa.texto = filiais.cod_sitef
        LEFT JOIN
     pla_mensagem AS msg 
ON rel.id_relatorio = msg.id_relatorio 
AND msg.id_empresa = 19
        LEFT JOIN
     pla_pessoa_cadastro AS pessoa 
ON rel.id_relatorio = pessoa.id_relatorio
        LEFT JOIN
     pla_score as score 
ON rel.id_pessoa_score = score.id_score
        LEFT JOIN
     pla_renda_presumida_analise AS renda 
ON rel.id_renda_presumida_analise = renda.id_renda_presumida_analise 
AND renda.id_empresa = 19
        LEFT OUTER JOIN
     pla_parametros backoffice 
ON rel.id_relatorio = backoffice.id_relatorio 
AND backoffice.tipo = 'BACKOFFICE' 
AND backoffice.id_empresa = 19
        LEFT OUTER JOIN
     pla_parametros resultado 
ON rel.id_relatorio = resultado.id_relatorio 
AND resultado.tipo = 'RESULTADO' 
AND backoffice.id_empresa = 19
WHERE
1 = 1
AND rel.id_empresa = 19 
   AND caixa.id_empresa = 19 
AND caixa.ativo = 1
AND rel.data_inclusao > '2015-22-04 00:00:00'
AND rel.data_inclusao < '2015-22-04 23:59:59'

Compartilhar este post


Link para o post
Compartilhar em outros sites

As duas últimas linhas são:

AND rel.data_inclusao > '2015-22-04 00:00:00'
AND rel.data_inclusao < '2015-22-04 23:59:59'  

Substitua por:

AND rel.data_inclusao BETWEEN '2015-22-04 00:00:00' AND '2015-22-04 23:59:59' 

Não deve dar muita diferença, na verdade, acho que nenhuma, hehe.

 

Você pode, antes do SELECT, adicionar o comando EXPLAIN (EXPLAIN SELECT ...), o banco irá detalhar a sua consulta. Coloque aqui o EXPLAIN para os dois casos. Outro comando interessante é o SHOW INDEXES FROM table, que mostra todos os índices existentes na tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

As duas últimas linhas são:

AND rel.data_inclusao > '2015-22-04 00:00:00'
AND rel.data_inclusao < '2015-22-04 23:59:59'  

Substitua por:

AND rel.data_inclusao BETWEEN '2015-22-04 00:00:00' AND '2015-22-04 23:59:59' 

Não deve dar muita diferença, na verdade, acho que nenhuma, hehe.

 

Você pode, antes do SELECT, adicionar o comando EXPLAIN (EXPLAIN SELECT ...), o banco irá detalhar a sua consulta. Coloque aqui o EXPLAIN para os dois casos. Outro comando interessante é o SHOW INDEXES FROM table, que mostra todos os índices existentes na tabela.

já estava com between, depois que troquei para > e < passou de timeout para 3min. e 18seg...só que comparado com 3seg. em média, qdo está sem data..ainda está muito alto o tempo..eu usei o desc (explain) só que aparece como possibilidade de chave exatamente o índice de data do filtro, que fui eu quem criou..não entendi muito..não têm como fazer o print e anexar aqui, né?

 

Abs.

Pessoal, inclui um order by e baixou pra 15 seg...sucesso..grato de qualquer forma à todos.

 

abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.