2017-04-22 12 views
1

テーブルに800レコードあり、4つのテーブルから20フィールド以上を更新するトリガーを使用しましたが、変更を更新するには非常に時間がかかりますが、計算フィールドは高速ですが使用できません他のテーブルからフィールドデータを取得/更新するためのフィールドを計算します。他にどんな方法がありますか?私はショーしようとしたの下トリガーを高速化する方法

は私がフィールド私は別のテーブルからフィールドデータを更新するために使用することができ、他のどのようなオプション

create TRIGGER [dbo].[WO-WHLINFO] 
    ON [dbo].[WORKORDERS] 
    AFTER INSERT,UPDATE 
    AS 
    BEGIN IF TRIGGER_NESTLEVEL() > 1 
    RETURN  UPDATE T1 
     SET [C/S ANGLE2]=T2.[C/S ANGLE2], 
       [BH SIZE2]=T2.[BH SIZE2], 
       [COLOR]=T2.[COLOR], 
       [MRP Wheel]=T2.[STOCK NO],  
       [WO PN]=T2.[WHL-ASSY LOOKUP] 

      FROM WORKORDERS T1 CROSS APPLY (SELECT TOP 1 * 
      FROM [WHl] T2 
      WHERE [WHEEL PN 1]=T2.[WHL-ASSY LOOKUP] OR 
        [WHEEL PN 1-S]= T2.[STOCK NO]) T2 
      END 

を更新しようとしている方法ですか?

+0

はこちらをご覧ください挿入、削除の速度を向上させることがあります。http://stackoverflow.com/questions/42780910/sql-taking-too-much-time -for-execution-a-query/42781448#42781448。それはあなたが不足しているインデックスを持っているようだ –

+0

カルロスありがとうが、私はデータベースエンジンチューニングアドバイザーを使用することができます。なぜなら私はエクスプレス版を持っているからです。 – Joe

+1

ほとんどのトリガーには、少なくとも 'inserted'または' deleted'行への参照があります。 – HABO

答えて

0

テーブルにインデックスを作成してみてください、これは

+0

で、どの列名を使用するか、またはどのようにしてインデックスを適用する列を選択できますか?すべての列に対する複合インデックスは何にも影響しませんか? – Joe

+0

は、私は 'CREATE NONCLUSTERED INDEX [DBO] ON [speedup_trigger]。[WORKORDERS] ( \t [PO番号] ASC、 \t [作業指示#] ASC、 \t [顧客] ASC、 としてのPKのを使用してインデックスを作成しました\t [SO NUMBER] ASC、 \t [SO DATE] ASC、 \t [約束DATE] ASC、 \t [ID] = OFF = OFF = OFF(PAD_INDEX、STATISTICS_NORECOMPUTE、SORT_IN_TEMPDB = OFF、DROP_EXISTING、OnlineとASC ) = OFF、ALLOW_ROW_LOCKS = ON、ALLOW_PAGE_LOCKS = ON) GO'だが何も変わらない – Joe

関連する問題