にカーソルを経由して(代わりにトリガの使用)ビューを更新するとき、私は更新トリガーU
がデータベースでの更新の3つのテーブルT1
、T2
とT3
と定義されているデータベースD1
でビューV
を持っていますD2
。 これら3つのテーブルには、0.75,6.0 &450万レコードが含まれています。 Sql Serverのバージョンは9.0.3042、Developer Editionです。パフォーマンスの問題のSQL Server 2005
私は上記のビューで次の更新ステートメントを実行すると、それは第二1内の準備ができている:私は次のバッチを発行したとき
UPDATE V
SET cust_task_id = 11975628
WHERE custno = '0319607'
は、しかし、それが完了するまでに1分12秒かかります:
DECLARE CURSOR c
FOR SELECT custno, cust_task_id FROM V WHERE custno = '0319607'
FOR UPDATE OF cust_task_id
OPEN c
FETCH NEXT FROM c
UPDATE V
SET cust_task_id = 11975628
WHERE CURRENT OF c
CLOSE c
DEALLOCATE c
Sql Server(8.0.2039、Standard Edition)の2000バージョンで同じデータベース(定義およびレコード数に関して)と同じ更新ステートメントを使用すると、両方のバッチが1秒以内に返されます。
あなたは2000年の計画は、インデックスシーク使用するのに対し、2005年の計画は、テーブルT1
、T2
とT3
上のインデックス・スキャンを使用していることがわかりSQL Serverの2つのバージョンの上のカーソルのバッチのクエリプランを見てみると。つまり、パフォーマンスの違いを説明します。
2005年のデータベースでsp_updatestats
を試しましたが、それは役に立ちませんでした。
どのように私は2005年のカーソルバッチをどのように実行する必要がありますか?
この問題を調査するために時間をいただき、ありがとうございます。
挨拶、
レックスファーベーク
Hello Eoin thanxが応答しますが、両方のデータベースの定義は同じです。インデックスがないので –