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

Esse SELECT está correto?


aprendiz_ce

Pergunta

Prezados,

Gostaria de saber se o SELECT logo abaixo está correto. O mesmo tem que me retornar os registros com datas dos últimos 5 (cinco) dias levando em conta a maior data encontrada entre todos os registros existentes.

SQL:
SELECT ac.*, us.* FROM acessos ac
LEFT JOIN usuarios us ON ac.ace_login = us.usu_login
WHERE DATE(ac.ace_acesso) >= (SELECT DATE(date_sub(MAX(ace_acesso), INTERVAL 5 DAY)) FROM acessos)
ORDER BY ac.ace_acesso DESC

Estrutura reduzida da tabela acessos:
ace_date - date
ace_login - varchar(10)

Estrutura reduzida da tabela usuarios:
usu_login - varchar(10)

Fiz vários testes e aparentemente está funcionando corretamente, mas como não quero correr o risco de falhas na utilização do mesmo, conto com a ajuda de vocês para confirmar o resultado dos meus testes.

Grato e aguardo qualquer comentário.

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Dois pontos a observar:

1) remova a função DATE de DATE(ac.ace_acesso) ou esta query sempre rodará em TABLE SCAN.

2) crie um índice por ace_acesso na tabela acessos. Assim sempre você rodará esta query de forma agilizada.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Denis, bom dia!

Entendido. 

Só uma colocação: O campo/coluna "ac.ace_acesso" é do tipo datetime. Na hora de postar aqui, acabei errando essa informação, sendo assim, devo manter o DATE(ac.ace_acesso), Correto?

Fora esse possíveis ajustes, o meu SELECT está correto?

Muitíssimo obrigado pela sua valiosa atenção e fico no aguardo de seu comentário.

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Denis, bom dia!

Entendido. 

1) Só uma colocação: O campo/coluna "ac.ace_acesso" é do tipo datetime. Na hora de postar aqui, acabei errando essa informação, sendo assim, devo manter o DATE(ac.ace_acesso), Correto?

2) Fora esse possíveis ajustes, o meu SELECT está correto?

Muitíssimo obrigado pela sua valiosa atenção e fico no aguardo de seu comentário.

 

 

Resp.:

1) Sim.mas não vai usar índice. Sempre rodará em table scan. Se a tabela for grande o banco vai sentar.

2) Sim.

Link para o comentário
Compartilhar em outros sites

  • 0

Denis, boa tarde!

Fico tranquilo em saber que a "formatação" desse SELECT está correto. A minha preocupação era somente essa mesma. Agora, sobre o índice eu já estava atento quanto a isso.

Dúvida:

Se eu estiver utilizando índice para o campo/coluna "ace_acesso" e no momento de executar o SELECT eu utilizar DATE(ac.ace_acesso) o índice não terá mais efeito, é isso? Se sim, como resolvo isso, ou seja, manter um índice ATIVO para o uso do DATE(ac.acesso).?

Muitíssimo obrigado pela sua atenção e aguardo seu comentário.

Forte abraço!

 

 

 

Editado por aprendiz_ce
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

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