Ir para conteúdo

POWERED BY:

Arquivado

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

NetHand Soluções Web

select lento - between

Recommended Posts

Pessoal, tenho uma tabela com logs de atividades, que vem acumulando registros ao longo de vários anos. Hoje são mais de 150 milhões de registros.

 

O que ocorre é que existe um sistema que permite gerar relatórios por período, mas a consulta por data é extremamente exaustiva, chegando a levar horas para imprimir um relatório as vezes não muito extenso... 1 ou 2 mil registros.

 

A linha que uso para trazer esse relatório é:

SELECT * FROM tb_historico WHERE ClientID = "& ClientID &" AND UserID = "& UserID &" AND str_to_date(data, '%d/%m/%Y') BETWEEN '"& IniData &"' AND '"& FimData &"'

 

A tabela é InnoDB e possui índices para os campos ClientID, UserID e Data.

 

Alguém tem alguma idéia de como melhorar a performance dessa consulta?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fez o Plano de Execução desta query ?

 

As estatíscas de BD estão atualizadas ?

 

A tabela é InnoDB e possui índices para os campos ClientID, UserID e Data.

 

São 3 índices (um por ClientID, um por UserID e outro por Data) , ou

um índice (por ClientID, UserID e Data) ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez o índice tripo resolva, eu tentaria dropar o índice por cliente e criaria um tripo, revolve o acesso só pelo cliente e o acesso desta sql.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Digo criar um índice múltiplo (mais de uma coluna).

 

Isto reduz o universo a ser pesquisado e pode melhorar a query.

 

Lembre que em geral o uso de funções (como da data), "mata" o uso do índice.

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.