2017-04-22 69 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