1

Web を検索しましたが、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 を呼び出すか、既にロードされているコレクションをループする方がよいでしょうか。

4

1 に答える 1

4

それらはすべて同じです。これは、すべての例が同じ基礎となる実装のラッパーであるためです。それらはすべて、内部で「実際の」Hibernate Criteria クエリ (または使用している NoSQL ライブラリの類似のコア実装) に変換されます。それらはすべてシンタックス シュガーです。

findAllByParentAndSomePropertyメソッド名を条件パラメーターに解析する作業があるため、最初に実行するときは他のものより数ミリ秒遅くなりますが、動的ファインダーは将来の呼び出しのためにキャッシュされるため、一般的なケースでは関係ありません.

しかし、コメンテーターが指摘しているように、実行されている実際の SQL を見て、パフォーマンスが気になる場合は適切なベンチマークを実行するのが最善です。一般的なケースはすべての状況に当てはまるわけではありません。また、効率的であるように見えても、予想外の余分なデータベース トラフィックと速度の低下を引き起こすクエリを簡単に作成できます。

于 2013-08-16T05:09:14.133 に答える