【问题标题】:Optimize Update query across tables优化跨表更新查询
【发布时间】:2016-04-04 11:07:45
【问题描述】:

我在 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 排序,然后执行应该是聚集索引扫描而不是搜索。

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

【问题讨论】:

  • 你应该添加两个表之间的关系

标签: sql sql-server performance


【解决方案1】:

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

create index idx_stagingtable_id on stagingtable(id);

这不会减慢批量加载速度,反而会加快速度。

【讨论】:

  • 我想在更新查询中做一些事情,而不是添加另一个查询。可能像查询提示...
  • 您可以按照建议不要进行扫描
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
  • 2015-11-08
  • 2022-01-24
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多