0
Iは、SQL Server 2005を使用しています
私は、このタスクファイルのテーブルを持っていますファイルのすべてが状態3(完了)にある場合、相対ファイルの状態は4(完了)でなければならない。SQL Serverのトリガもパフォーマンス
タスクテーブルのトリガを追加することでこの問題を解決しようとしましたが、タスクテーブルの更新が数秒になる可能性があり、データベース接続の問題が発生するため、パフォーマンスに満足できません。
私が書いたトリガは、このクエリは平均200ミリ秒になります
CREATE TRIGGER [dbo].[tr_set_file_to_worked]
ON [dbo].[PROD_TASK]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
;WITH ToUpdate AS
(
SELECT
pf.id_file, pt.id_state, COUNT(*) AS tasks
FROM
prod_task pt
LEFT JOIN
prod_file pf ON (pt.ID_FILE = pf.ID_FILE)
GROUP BY
pf.id_file, pt.id_state
);
UPDATE pf
SET pf.ID_STATE = 4
FROM prod_file pf
INNER JOIN inserted ins ON (pf.Id_file = ins.id_file)
AND NOT EXISTS (SELECT *
FROM ToUpdate tu
INNER JOIN inserted ins ON (tu.id_file = ins.ID_FILE)
WHERE tu.id_state <> 3);
END
です。
リスソリューションを使用すると20ミリ秒かかります。
UPDATE pf
SET ID_STATE = 4
FROM inserted i
INNER JOIN PROD_FILE pf ON pt.ID_FILE = pf.ID
LEFT JOIN PROD_TASK pt ON (i.ID_FILE = pt.ID_FILE AND pt.ID_STATE <> 3)
WHERE i.ID_STATE = 3 AND pt.ID_TASK is NULL
これはあなたの現在のトリガーであり、それは働いていますか? – Squirrel
@Squirrelいいえ、私はそれを停止し、質問のために少し変更しました。 – overcomer