Query query = session.createQuery(“select o from Ocorrencia o where o = (select oc from Ocorrencia oc join demanda d group by oc.demanda having max(oc.data) and oc.demanda = d”);
Tentei outro jeito aqui.
Espero que dê uma luz.
Se alguém tiver mais experiência em sql e o hibernate e puder ajudar.
A sua segunda query consegue usar um índice em data se você criar
Mas você pode separar em 2 queries. Essa com um índice em (id_demanda, data) não vai nem na tabela, pega as informações direto do índice
e a principal precisaria de um índice simples em (data)
Não vejo como isso ficar lento para um IN pequeno, algo que vc pode forçar com um um limit na primeira query, afinal ninguém exibe mil registros em uma página e sim usa paginação
No mais, 35 mil registros não é bem o volume que vai causar lentidão por falta de índice, talvez seu mysql configurado pra usar poucos recursos
O arquivo de configuração do MySQL é chamado my.ini (windows) ou my.cnf (linux). Provavelmente seu MySQL vem com alguns outros arquivos exemplos (my-small.ini, my-medium.ini, my-large.ini, my-huge.ini) com valores diferentes de uso de recursos, escolhe o adequado pra vc e substitui o conteúdo do my.ini por ele e restarta. Só não esquece de fazer backup do my.ini antigo pra caso o MySQL não levantar denovo com o novo. Ex: se mudar o tamanho do arquivo de log do innodb não vai levantar se não deletar os arquivos de log existente (ib_logfile na pasta data)
Query query = session.createQuery("from Ocorrencia as o where o.data in(select max(oc.data) from Ocorrencia as o2 where o2.demanda.idDemanda=o.demanda.idDemanda)");
Primeiramente, lele_vader, brigadão pelo empenho em me ajudar cara! Poucas vezes encontrei alguém assim!
victorcosta, fiz o lance do my.ini que voce falou…coloquei o huge, e consegui fazer a consulta, mesmo com todo meu mapeamento em EAGER, em menos de 4 segundos!
e finalmente yoshikichi, foi voce quem resolveu o problema cara!
Era realmente só isso: amarrar os 2 selects. Não sei qual a logica por tras disso, mas…funcionou…e agora o que menos me importa é o porque disso! Hahaha!!!
Que bom que funcionou.rsrs
Vou até guardar esse código aqui também.
Agora não sabia dessa do mysql em ter diversos arquivos para o nivel de recursos.
Muito interessante.
Primeiramente, lele_vader, brigadão pelo empenho em me ajudar cara! Poucas vezes encontrei alguém assim!
victorcosta, fiz o lance do my.ini que voce falou…coloquei o huge, e consegui fazer a consulta, mesmo com todo meu mapeamento em EAGER, em menos de 4 segundos!
e finalmente yoshikichi, foi voce quem resolveu o problema cara!
Era realmente só isso: amarrar os 2 selects. Não sei qual a logica por tras disso, mas…funcionou…e agora o que menos me importa é o porque disso! Hahaha!!!