多くのテーブルからプルする、かなり巨大な createCriteria クエリを実行する Grails アプリケーションがあります。パフォーマンスがかなりひどいことに気付き、createCriteria 自体ではなく、後で行うオブジェクト操作にそれを特定しました。私のクエリは、必要な元のオブジェクトをすべて正常に取得しますが、オブジェクトを操作しているときに、各要素に対して新しいクエリを実行しています。これが私のコントローラーコードの簡略化されたバージョンです:
def hosts = Host.createCriteria().list(max: maxRows, offset: rowOffset) {
// Lots of if statements for filters, etc.
}
def results = hosts?.collect{ [ cell: [
it.hostname,
it.type,
it.status.toString(),
it.env.toString(),
it.supporter.person.toString()
...
]]}
関連オブジェクトを見つけるために独自のクエリを実行するメソッドの呼び出しなど、さらに多くのフィールドがあります。私の質問は次のとおりです。個々の行ごとに大量の余分なクエリを実行しないように、元のクエリに結合を組み込むにはどうすればよいですか? 現在、約 700 行のクエリには 2 分かかりますが、これは長すぎます。どんなアドバイスも素晴らしいでしょう!ありがとう!