我在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工作的一部分,因此我尝试在一个查询中完成所有操作。
答案 0 :(得分:1)
将数据加载到StagingTable
后,然后创建索引:
create index idx_stagingtable_id on stagingtable(id);
这不会减慢批量负载,它会使速度更快。