我在网上搜索,找不到基准比较grails标准,findAll和findAllBy
那么最快的是什么?
// groovy enhance collection method
parent.childs.findAll{ it.someProperty == someValue }
或
Child.findAllByParentAndSomeProperty(parent, someValue)
或
Child.createCriteria().list{
eq('parent', parent)
eq('someProperty ', someValue)
}
更新
由于parent.childs.findAll是一个常规的增强集合方法,它不会调用数据库。像:
[1,2,3,4,5].findAll{ it > 3} == [4, 5]
所以我最好调用de DB或循环已经加载的集合。
答案 0 :(得分:3)
他们都是一样的。那是因为你所有的例子都是同一个底层实现的包装器 - 它们都被转换为“真正的”Hibernate Criteria查询(或者你正在使用的NoSQL库中的类似核心实现)。他们都是语法糖。
findAllByParentAndSomeProperty
将比第一次运行时慢几毫秒,因为有一些工作涉及将方法名称解析为条件参数,但动态查找器会被缓存以供将来调用,因此这在一般情况下无关紧要情况下。
但是正如评论者所指出的那样,你最好看看运行的实际SQL,并在关注性能时做适当的基准测试。一般情况并不适用于所有情况,并且很容易创建一个看起来很有效但会产生意外的额外数据库流量和缓慢的查询。