优化跨表的更新查询

时间:2016-04-04 03:03:03

标签: sql sql-server performance

我在Sql Server 2014上运行。我试图执行以下查询:

UPDATE [dbo].[Table1]
   SET Table1.[PaymentId] = ST.PaymentId
      ,Table1.[ServiceId] = ST.ServiceId
      ...several more fields
 FROM [dbo].[StagingTable] as ST
 WHERE 
   Table1.Id = ST.Id 

Table1在Id上有标识和索引,但StagingTable没有Id的索引。我在StagingTable上遗漏了索引,因为我需要进行非常快速的批量数据插入。我在每张桌子上有大约400万条记录。

此查询似乎运行速度非常慢,因为它最初在执行计划中对StagingTable执行表扫描,并对Table1执行Custered Index Seek。但是,我想在StagingTable中按Id排序,然后执行应该是Clustered Index Scan而不是搜索。

有人知道如何在更新查询中执行此操作吗?我将此作为SSIS工作的一部分,因此我尝试在一个查询中完成所有操作。

1 个答案:

答案 0 :(得分:1)

将数据加载到StagingTable后,然后创建索引:

create index idx_stagingtable_id on stagingtable(id);

这不会减慢批量负载,它会使速度更快。