Clipper On Line • Ver Tópico - Mysql: consulta lenta

Mysql: consulta lenta

Discussão sobre SQL

Moderador: Moderadores

 

Mysql: consulta lenta

Mensagempor alxsts » 15 Ago 2021 00:33

Olá!
cjp escreveu:Realmente vc tem razão, não são todos que precisam ser considerados nesta consulta.


JoséQuintas, em 23/04/2021 escreveu:Será que precisa mesmo todas as cotações de todos os tempos? Cotações antigas só vão servir como perda de tempo, deveria limitar data também.
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

Mysql: consulta lenta

Mensagempor cjp » 15 Ago 2021 01:40

De fato ficou contraditório.
Mas o fato é que eu ainda preciso definir bem o que realmente é necessário.
Veja, neste primeiro caso (marca='V')
select codigo,max(datahora) as data,nritem from acoes use index (coddt) where marca='V' and hrvisto<>91234 and datahora>'"+dtsql(date()-20)+"' group by codigo order by data

o mais provável é que seja suficiente trazer os dados dos últimos 20 dias (talvez até menos). Mas não será sempre assim. É possível que não tenha nenhuma cotação cadastrada nos últimos 20 dias (ou até em período bem maior), e mesmo assim o código deve constar na lista (aliás, neste caso, com maior razão).
Ainda não pensei num critério ideal para restringir a pesquisa.
O que eu preciso é de uma lista simples dos códigos que não tenham cotação cadastrada nos últimos minutos ou nas últimas horas (dependendo da marca).
Antes a consulta estava mais complexa, verificando isso no próprio select. Agora eu simplifiquei o select, como acima, e verifico localmente depois a hora da última cotação.
Como poderia melhorar isso?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Mysql: consulta lenta

Mensagempor JoséQuintas » 15 Ago 2021 08:37

cjp escreveu:Como poderia melhorar isso?


Com uma boa modelagem de dados.

Apenas talvez:
SELECT a.codigo, max( acoes.datahora )  AS data, acoes.nritem
FROM
   (
      SELECT
        ( SELECT DISTINCT CODIGO FROM ACOES WHERE MARCA='V' ) AS A
      LEFT JOIN ACOES
      ON A.CODIGO = ACOES.CODIGO AND HRVISTO <> 91234 AND DATAHORA > '2021-08-01'
   )
WHERE .....
GROUP BY a.codigo


teste.png


apenas um simulado meio equivalente
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18014
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Mysql: consulta lenta

Mensagempor cjp » 15 Ago 2021 12:57

Testei o teu exemplo no Heidi, e deu erro, conforme anexo.
Tirei o Where porque não saberia o que colocar ali. Não sei se foi por isso o erro, mas acho que não.
A verdade é que não entendi bem o teu exemplo. Pra mim ficou confuso com 3 select. Também não sei para que serviriam o left join.
Note que antes eu tinha um select parecido com este, mas eram 2 select, que está no início deste post. E me foi recomendado simplificá-lo.
Anexos
tela.png
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1527
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

Anterior



Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 7 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro