在自联接表上长时间运行查询

时间:2011-09-30 09:49:08

标签: tsql ssis

我尝试通过将实际行的值与同一表中的所有其他行进行比较来尝试提高更新表的每一行上的coloumn的查询的性能。这是查询:

update  F set   
    PartOfPairRC = 1
from    RangeChange F
where     Reject=0
and exists( 
            select 1 from RangeChange S
            where   F.StoreID = S.StoreID
            and F.ItemNo = S.ItemNo
            and       F.Reject = S.Reject
            and F.ChangeDateEnd = S.ChangeDate - 1)

随着表中行数的增加,查询的性能会迅速下降。我桌上有50万行。

有更好的方法吗? SSIS能否更好地处理这样的操作?

非常感谢任何帮助,感谢Robert

1 个答案:

答案 0 :(得分:1)

您可以尝试在该表上创建索引:

create index idx_test on RangeChange(StoreID, ItemNo, Reject, ChangeDateEnd) where reject = 0

- 当你没有使用SQL企业时,摆脱索引中的where条件并将拒绝列作为索引包含在索引列中 - 确保你已经在表上有一个聚簇索引(当你不能创建上面的索引作为聚集时)

- 我会将查询编写为连接:

update F set
   F.PartOfPairRC = 1
from  RangeChange F
   join RangeChange S
      on F.StoreID = S.StoreID
         and F.ItemNo = S.ItemNo
         and F.Reject = S.Reject
         and F.ChangeDateEnd = S.ChangeDate - 1
where F.Reject=0 and S.Reject = 0