问题: 我们用很多条目查询我们的数据库。整体应用程序性能还可以。但我认为,如果我们的瓶颈,查询特殊表格可以并行完成,那可能会更好。
我们正在使用像以下那样的动态查找器:
Object.findAllByObjectCollectionAndParentIsNullAndDeletedByUserIsNull(objectCollection, [sort: 'attr1.number', fetch: [objectType: 'eager']])
我考虑这个解决方案:将查询分为两个步骤。
我已经用谷歌搜索了一些提示,但什么也没找到。
我们正在使用grails 2.3.11,hibernate:3.6.10.13,其下有jdk 1.7。
答案 0 :(得分:0)
我找到了解决方案!
ArrayList<Long> objectIds = Attribute.executeQuery("select o.id from Object o, ObjectType ot where o.objectCollection = :oc and o.parent is null and o.deletedByUser is null and oc.typeUsage = ot order by ot.nr asc", [oc: objectCollection])
Object[] tmp = new Object[objectIds.size()]
withPool(10, {
objectIds.eachWithIndexParallel {
Long objectId, i ->
Object o = Object.findById(objectId, [cache: true])
tmp[i] = a
}
})
for (Object a : tmp)
a.merge()
它的回合慢了约3倍!
我认为原因是,
但最终 - 我们无法使用它,因为延迟加载的字段无法在以后按需加载。所以这可能只是一个只读对象的解决方案