1
我试图在Grails中映射的域对象上使用.findAll
方法。一切正常。但是,当期待MySQL的结果(包含大量行(10.000+))时,需要几秒钟才能完成。有了150.000行,这需要30秒才能完成。Grails在返回大型结果集时发现速度很慢
我的代码:
def temperatures = Temperature.findAll(sort: "logDate", order: "desc", max: limit, offset: offset) {
sighting.device == device
if (tripId) {
tripDevice.trip.id == tripId
}
}
温度有两个嵌套的孩子的。
def temperature
基本上是Temperature
类型的List
。查询本身可以在0.2秒内在本机SQL中的Grails中执行,从而产生数千行。我也试着使用变量lazy
标签,我不感兴趣的内容。
我怀疑的问题是每一行被映射为Temperature
(休眠)的对象的事实,也可能嵌套对象。这可能会超过100.000 Temperatures
的List
。
我试图找到一种方法来做到这一点,而不需要实际编写任何SQL代码。我怎么能做到这一点?
简短的回答是,如果你需要它们作为类的实例,那么你做得很对,如果你只是想要“值”,并且实际上不需要对实例进行“动作”,那么使用原始SQL是会更快。 –
@JoshuaMoore我只需要对象的两个字段,所以我实际上并不对对象本身感兴趣。原始SQL是解决这个问题的办法,但这是一个相当长的查询,而且这种查询的可维护性比我试图做的要低。没有编写原始SQL的方法吗? – Sammekl