以前の開発者が作成したアプリケーションを継承しました。データベースコールの中には、大量のデータがある場所では実行速度が遅いものがあります。私は一般的にはSQLコードがよく書かれているが、私には「何が?」と思う場所があることがわかった。ここでこの結合は複雑ですか?
は一例です:
select a.*
from bs_ResearchEnquiry a
left join bs_StateWorkflowState_Map b
on (
select c.MapId from bs_StateWorkflowState_Map c
where c.StateId = a.StateId AND c.StateWorkflowId = a.StateWorkflowId
)=b.MapId
where
b.IsFinal=1
MapId
フィールドがbs_StateWorkflowState_Map
テーブルに一意の主キーです。- および
StateWorkflowId
も一意のキーを形成する。 - 常にそのため、私のように、安全に左をより効率的に参加書き換え、および可能性が
bs_ResearchEnquiry
外部テーブル内の行にこれらのキーの試合があります:
inner join bs_StateWorkflowState_Map b
on b.StateId = a.StateId AND b.StateWorkflowId = a.StateWorkflowId
またはWAS私が逃した何かを達成しようとしている元の開発者?
UPDATEを:私はちょうど単純に参加しようとしています反対の効果を見つける!実行時間が数秒から1分以上に増加しました。したがって、元の構文が過剰に設計されているように見えますが、開発者が最も効率的な方法を使用していた可能性があります。なぜこれが当てはまるのかまだ分かりません。 – userSteve
は[クエリプラン](https://stackoverflow.com/a/7359705/50552)をご覧ください。 'left join'を維持すると、パフォーマンスは向上しますか? – Andomar
@Andomarはい、左の結合は物事を改善します。 インナーと私の構文が参加左に90秒 私の構文をとりましょう私の目的は、<2秒 – userSteve