1

I search the web and I cannot find a benchmark comparing grails criteria, findAll and findAllBy

So what is the fastest ?

// groovy enhance collection method
parent.childs.findAll{ it.someProperty == someValue }

or

Child.findAllByParentAndSomeProperty(parent, someValue)

or

Child.createCriteria().list{
    eq('parent', parent)
    eq('someProperty ', someValue)
}

UPDATE

As parent.childs.findAll is a groovy enhanced collection method, it dosen't call the database. Like:

[1,2,3,4,5].findAll{ it > 3} == [4, 5]

So am I better to call de DB or to loop through an already loaded collection.

4

1 回答 1

4

他们都是一样的。这是因为您的所有示例都是相同底层实现的包装器 - 它们都在引擎盖下转换为“真正的”Hibernate Criteria 查询(或您正在使用的 NoSQL 库中的类似核心实现)。它们都是语法糖。

findAllByParentAndSomeProperty第一次运行时会比其他方法慢几毫秒,因为需要将方法名称解析为标准参数,但是动态查找器会被缓存以供将来调用,所以这在一般情况下是无关紧要的。

但正如评论者指出的那样,您最好查看正在运行的实际 SQL,并在担心性能时进行适当的基准测试。一般情况并非适用于所有情况,并且很容易创建一个看起来很高效但会产生意想不到的额外数据库流量和缓慢的查询。

于 2013-08-16T05:09:14.133 回答