2017-04-22 68 views
1

我在表中有800條記錄,我用觸發器從4個表中更新了20多個字段,但非常慢需要25秒來更新更改,我知道計算字段更快,但我無法使用計算字段來從另一個表中獲取/更新字段數據。我可以使用哪些其他方法?如何加速觸發器

下面我想表明的是我是多麼想更新場

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 - 用於執行的-一個查詢/ 42781448#42781448。看起來你有一個缺失索引 –

+0

謝謝卡洛斯,但我可以使用數據庫引擎優化顧問。因爲我有快遞版 – Joe

+1

大多數觸發器至少有一個對「插入」或「刪除」行的引用。 – HABO

回答

0

請嘗試創建表的索引,這可能會增加插入和刪除的速度

+0

與哪個列名稱或如何選擇列應用索引?所有列的組合索引不影響任何內容? – Joe

+0

我創建的索引使用PK的如'CREATE NONCLUSTERED INDEX [speedup_trigger] ON [DBO] [工作訂單] ( \t [PO#] ASC, \t [WORK ORDER#] ASC, \t [CUSTOMER] ASC, \t [SO NUMBER] ASC, \t [SO DATE] ASC, \t [PROMISED DATE] ASC, \t [ID] ASC )WITH(PAD_INDEX = OFF,STATISTICS_NORECOMPUTE = OFF,SORT_IN_TEMPDB = OFF,DROP_EXISTING = OFF,ONLINE = OFF,ALLOW_ROW_LOCKS = ON,ALLOW_PAGE_LOCKS = ON) GO'但沒有chnaged – Joe