子テーブル(テーブル2)にレコードを挿入することによって発生するワークフロー(送信、承認など)を持つレコードがあります(Table1)。たとえば、Table1のレコードが送信されると、ワークフローステータス(StatusField)、日付、およびユーザーが送信しているTable2の対応するレコードが挿入されます。私はその後、その状況(例えば、提出されたレコードのみ)に基づいてTable1にクエリを試みるとき、私は最も効率的な方法を理解しようとしており、わかりません。私は、Table1のPKがパラメータである関数を作成しようとしましたが、それは一致するFKを持つTable2からの最新のStatusfieldをキックアウトします。また、FKでグループ化されたMax PKのTable2のPKでViewを作成し、LEFT OUTER JOIN(Table2の対応するレコードがないため、ステータスが保留中であることがあるため)でリンクしました。より速く見える方法は、次のようにサブクエリを実行することです。子テーブルからステータスを取得する最も効率的な方法
SELECT a.*
,(SELECT TOP 1 StatusField
FROM Table2 b
WHERE b.FK=a.PK
ORDER BY b.DateField DESC) StatusField
FROM Table1 a
WHERE (SELECT TOP 1 StatusField
FROM Table2 b
WHERE b.FK=a.PK
ORDER BY b.DateField DESC)='Submitted'
私はまだ良い方法があるように感じています。何かご意見は?誰かが私にポイントすることができる同様の質問と回答があれば、それも素晴らしいでしょう。ありがとうございました!
この作品どれくらい速いかはまだ分かりませんが、すぐにテストされます。このような迅速な対応をありがとう! – Julian
これをスピードアップする1つの方法...派生テーブルを物理テーブルの最大値にして索引付けします。これにより、table1への結合が高速化され、table2がインデックス(fk、datefield)を介して最大結果に直接結合されます。がんばろう! – RMathis
これは速く、ありがとう! – Julian