Ir para conteúdo
Fórum Script Brasil
  • 0

Select muito lenta


Filipe Ricardo

Pergunta

olá pessoal, eu tenho uma select que demora muito pra executar, algo em torno de 10 segundos, fazendo com que não rode no site apenas diretsamente no phpmyadmin, alguém poderia me ajudar

SELECT t.cod_cliente, max(t.data_hora_pedido) as data_hora_pedido

FROM tab_pedido t

WHERE TO_DAYS( NOW( ) ) - TO_DAYS( t.data_hora_pedido ) > 80

and t.cod_cliente NOT IN

(SELECT a.cod_cliente

FROM tab_pedido a

WHERE TO_DAYS( NOW( ) ) - TO_DAYS( a.data_hora_pedido ) <= 80)

GROUP BY t.cod_cliente

ORDER BY t.data_hora_pedido ASC

traduzindo: essa select vai selecionar todos os clientes que já faz mais de 80 dias que não fazem pedidos

alguém pederia me ajudar, teria como fazer uma outra pra chegar nesse mesmo resultado

obrigado :unsure:

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Oi, 'Filipe Ricardo'!

Infelizmente muitos programadores comentem este tipo de erro (colocar expressões no lado esquerdo da comparação da select)

E este tipo de erro sempre incorre em TABLE SCAN, mesmo que se utilize de índices.

Vamos a correção:

Passo 1

Criar índice por data_hora_pedido na tabela tab_pedido

Passo 2

Modificar sua pesquisa para:

SELECT t.cod_cliente, max(t.data_hora_pedido) as data_hora_pedido
FROM tab_pedido t 
WHERE t.data_hora_pedido  <=  DATE_SUB( NOW( ) , INTERVAL 80 DAY)
GROUP BY t.cod_cliente 
ORDER BY t.data_hora_pedido ASC

Se houver erro no select acima foi porque não pude testá-lo (não tenho mysql onde estou agora). Neste caso, favor comunicar o erro para que possamos corrigí-lo.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...