データベースには、30列の2つのテーブルをwhere条件で結合してテーブルを更新するストアドプロシージャーがあります。 SQLの一般的な形式は次のとおりです。多くのISNULLを持つ多数列のUPDATE-JOINには時間がかかりますか?
UPDATE Target
SET col1 = Source.col1
INNER JOIN Source
on
ISNULL(Target.Col2, '') = ISNULL(Source.Col2, '') and
ISNULL(Target.Col3, '') = ISNULL(Source.Col3, '') and
.
.
.
ISNULL(Target.Col31, '') = ISNULL(Source.Col31, '') and
クエリプランは次のとおりです。それをあなたのPCに保存して、それを再び開くようにしてください。
ソーステーブルは65Mレコード、ターゲット165Mを持っています。これまではかなりの時間がかかっていました。どのようにクエリが醜い、潜在的に非効率的であるかを考慮すると、私はこれを驚くべきものと見なします。今月は1.5時間稼働し、プロセッサーの100%を使用しており、それを強制終了しなければならなかった。
以下のクエリを即興して時間通りに実行する方法を教えてください。
30列の結合条件で使用されるいくつかの列に単一の列のインデックスがあります。
私はISNULL関数を知っており、30列の結合はナットであり、これは悪い設計です。私を責めないで、私はこの経済を継承しました。
残念ながら、再設計の時間はありません。助言がありますか?
先月から何が変更されましたか? –
すべてのNULLを ''''に更新してから、ISNULLなしでクエリを実行してください。しかし、レムスの質問は非常に関連しています。 – MatBailie
あなたはマージとしてそれを書き直すことを考えましたか?これらの列をnull不可能にして60個のISNULL呼び出しを排除することを検討しましたか? –