max
は、オブジェクトとともにArrayListを返します。
maxResults
魔女のPagedResultList
を返します。totalCount
を使用して、条件に一致するオブジェクトを数えるための2番目のクエリを発行できます。 totalCountは2番目のクエリです。実際にはすべての10kオブジェクトをフェッチしません。
だから私はあなたの説明の問題を解決する方法がわかりません。なぜなら、クエリがデータベース内の10kと一致すると、それはあなたの合計カウントになるからです。あなたはtotalcountが> 500、500と表示されているかどうかチェックすることができます。
しかし、もしGORMが10kオブジェクトを取り戻しているのであれば、そうではありません。詳細については、最初の例http://docs.grails.org/3.2.10/ref/Domain%20Classes/createCriteria.htmlを参照してください。
挙動を示すための非常に簡単なコントローラ:
def index() {
println "max:"
def q1 = Foo.createCriteria().list(max: 10) { }
println q1.class.name
println q1.totalCount
println "maxResults:"
def q2 = Foo.createCriteria().list {
maxResults(10)
}
println q2.class.name
// println q2.size() // totalCount doesn't exist on an ArrayList
}
出力:
max:
Hibernate: select this_.id as id1_0_0_, this_.version as version2_0_0_,
this_.name as name3_0_0_ from foo this_ limit ?
grails.orm.PagedResultList
Hibernate: select count(*) as y0_ from foo this_
2
maxResults:
Hibernate: select this_.id as id1_0_0_, this_.version as version2_0_0_,
this_.name as name3_0_0_ from foo this_ limit ?
java.util.ArrayList
あなたはまた、生成されたHQLは同じ方法のいずれかと2番目のクエリで見ることができますがtotalCountプロパティのために送られます。
希望に役立ちます。
私は10k個のオブジェクトすべてを取り戻すわけではありませんが、10k個のオブジェクトがあることを知るためにクエリを完了しているわけではありません。 –
「クエリを完了する」とは、dbがクエリを実行して結果を取得することを意味します。私はあなたが何を記述するためにSQLの方法を認識していない。インデックス化されたフィールドでこれを行う場合、それは非常に速くなければなりません。 – erichelgeson