gpt4 book ai didi

java - 返回大型结果集时 Grails findAll 变慢

转载 作者:行者123 更新时间:2023-11-28 23:23:29 24 4
gpt4 key购买 nike

我正在尝试在 Grails 中的映射域对象上使用 .findAll 方法。一切正常。然而,当期望来自 MySQL 的结果包含很多行(10.000+)时,需要几秒钟才能完成。对于 150.000 行,这需要 30 多秒才能完成。

我的代码:

def temperatures = Temperature.findAll(sort: "logDate", order: "desc", max: limit, offset: offset) {
sighting.device == device
if (tripId) {
tripDevice.trip.id == tripId
}
}

温度有两个嵌套的 child 。

def temperature 基本上是 Temperature 类型的 List。查询本身可以在 Grails 中以原生 SQL 执行,仅需 0.2 秒,从而产生数千行。我还尝试对我不感兴趣的变量使用 lazy 标签。

我怀疑问题在于每一行都被映射为 Temperature (Hibernate) 的对象,也可能是嵌套对象。 List 中的 Temperatures 可能远远超过 100.000。

我正在尝试找到一种方法来执行此操作,而实际上根本不编写任何 SQL 代码。我怎样才能做到这一点?

最佳答案

您可能想看看使用 criteria and projections .在您的情况下,查询类似于以下内容:

def temperatures = Temperature.createCriteria().list(max: limit, offset: offset) {
...
projections {
property "x"
property "y"
}
}

你的双向连接让它变得有点棘手,你可能不得不使用 TripDevice 而不是 Temperature。

关于java - 返回大型结果集时 Grails findAll 变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40491887/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com