0

同等のデータを取得する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テーブルからのデータがクエリ結果に集約される瞬間です。しかし、これらの結果を一般化することが正しいかどうかはわかりませんか?結合方法のみが異なるクエリのクエリプランはほぼ同じでしょうか?結合方法を変更することでクエリコストに大きな差をつけることは可能ですか?

4

1 に答える 1

2

使用EXPLAIN ANALYZEして参照してください。

それらが同じクエリプランに変換されても驚かないでしょう。

参照:https ://stackoverflow.com/tags/postgresql-performance/info

于 2012-11-15T22:58:41.700 に答える