0

基本的に、最適化が必要なビューがあります。ビューは次のようになります。

SELECT *
FROM IM_Data.history.v_SystemInfo si
INNER JOIN IM_Data..systemOutDates od ON
    si.TopId = od.TopId
    AND si.OutDate = od.OutDate
WHERE 
    TopId = 196

ビューを次のようにすることができれば(明らかにできません):

SELECT @OutDate = OutDate 
FROM IM_Data..systemOutDates
WHERE TopId = 196

SELECT *
FROM IM_Data.history.v_SystemInfo si
WHERE 
    TopId = 196 AND
    OutDate = @OutDate

10倍速くなります。だから私が探しているのは、これを手伝ってくれるほど SQL をよく知っている人です。基本的に、TopDate を 1 回クエリしてから、すべての行で結合するのではなく、すべての行で同じものを使用するクエリが必要です (これは時間の無駄です)。

また、TopDate を削除して、ビューをクエリしているユーザーにそれを処理させることはできません。これは、ビューを使用するレガシー コードが多すぎるためです。したがって、唯一のオプションは、ユーザーが現在のようにクエリを実行できるようにすることですが、何らかの方法で結合のパフォーマンスの低下を解決します。

前もって感謝します!

4

1 に答える 1

0

質問の意味がよくわかりませんが、サブクエリを使用するか、一時的に条件テーブルに参加して 1 つの結果を取得することができます。構造の例がなければ、より良いオプションがあるかどうかを判断することはほとんど不可能です。このようなものがあなたが望むものに近づくかもしれないと思います.クエリのコストを見て、それが役立つかどうかを確認してください.

SELECT * FROM 
    IM_Data.history.v_SystemInfo AS si INNER JOIN 
    (SELECT TOP 1 OutDate FROM IM_Data..systemOutDates WHERE sourceId = si.TopId) AS    tblOutDate
WHERE 
    si.TopId = 196 AND si.OutDate = tblOutDate.OutDate
于 2013-02-06T09:40:07.770 に答える