同等のデータを取得する2つのクエリを次に示します。
SELECT DISTINCT packStatus
FROM PackStatus packStatus JOIN FETCH packStatus.vars, ProcessEntity requestingProcess
WHERE
packStatus.status.code='OGVrquestExec'
AND packStatus.procId=requestingProcess.activityRequestersProcessId
AND requestingProcess.id='1000323733_GU_OGVProc'
SELECT DISTINCT packStatus
FROM PackStatus packStatus JOIN FETCH packStatus.vars
WHERE
packStatus.status.code='OGVrquestExec'
AND packStatus.procId=(SELECT requestingProcess.activityRequestersProcessId FROM ProcessEntity requestingProcess WHERE requestingProcess.id='1000323733_GU_OGVProc')
requstingProcess
これらのクエリは、との結合方法が異なりますpackStatus
。一般に、パフォーマンスの観点から、これら2つの方法のどちらがより好ましいですか?Postgres8.4でHibernate3.3によって提供されるJPA1.2を使用しています。
UPD:偽のクエリをアプリからの実際のクエリに置き換えました。これは、 1番目と2番目のクエリ用にHibernateによって生成されたSQLです。クエリプランへのリンク:1番目、2番目。クエリプランはほとんど同じように見えます。唯一の違いは、bpms_processテーブルからのデータがクエリ結果に集約される瞬間です。しかし、これらの結果を一般化することが正しいかどうかはわかりませんか?結合方法のみが異なるクエリのクエリプランはほぼ同じでしょうか?結合方法を変更することでクエリコストに大きな差をつけることは可能ですか?