Busca lenta utilizando hasmany
23/06/2016 12:32
0
Boa dia a todos. Estou com um problema relacionado a pegar um valor que se encontra em outra tabela utilizando HasMany.

Tenho uma tabela de Indicadores e essa tabela se associa com uma outra que guarda seu histórico de valores.
Quero mostrar no index de indicadores ,além de sua informações, tbm seu valor atual, que seria o ultimo registro da tabela "Histórico de valores do Indicador".

Estou fazendo da seguinte forma:

class Indicador {
?String nome
?Date inicioVigencia

?static hasMany = [historicoValores : HistoricoValoresIndicador]

?BigDecimal getValorAtual() {
?historicoValores.asList().last()?.valor
?}
}

class HistoricoValoresIndicador {
?String InicioVigencia
?String fimVigencia
?BigDecimal valor

?static belongs_to = [indicador : Indicador]
}

Apesar de conseguir mostrar o valor atual, está demorando muitos segundos para carregar essas informações. Acredito que seja
pq está ocorrendo uma consulta para cada valor dos indicadores...

Poderiam me indicar uma forma melhor para realizar esse tipo consulta?
Tags: Grails


0
De quantos objetos estamos falando?
Observe que você carrega uma coleção inteira só para acessar um dado do último registro. Tente fazer uma query especifica pra isso com criteria ou hql e crie um índice


0
São mais ou menos 360 registros de indicadores, mas a quantidade de históricos é proximo de 20.000 registros.
Obrigado pela sugestão, vou checar se o tempo melhora com uma query especifica.
Acho que da forma que eu estou fazendo, estou disparando 360 consultas para pegar o valor de todos os indicadores na hora de listar. Sabe como posso melhorar essa parte?
23/06/2016 20:54


0
De cabeça, sem testar, penso que seria algo como:
def getValorAtual() {
  HistoricoValoresIndicador.executeQuery("select h.valor from HistoricoValoresIndicador h order by h.xxxxxxx DESC")[0][0]
}
class HistoricoValoresIndicador {
  ...
  static mapping = {
    xxxxxxx index: 'xxx_idx'
  }
}


0
Magno, fiz da forma que disse e realmente o tempo melhorou bastante. Acho que ainda pode melhorar, mas com certeza foi um grande avanço.
Muito obrigado pela ajuda xD.
24/06/2016 19:00



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto