我尝试通过将实际行的值与同一表中的所有其他行进行比较来尝试提高更新表的每一行上的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
答案 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