提高插入的性能?

时间:2017-05-10 12:34:51

标签: sql-server performance tsql

我按总计IO运行了性能 - 热门查询(我正在尝试改进此过程)。

排名第一的是这段代码:

DECLARE @LeadsVS3 AS TT_LEADSMERGE 

DECLARE @LastUpdateDate DATETIME 

SELECT @LastUpdateDate = MAX(updatedate) 
FROM [BUDatamartsource].[dbo].[salesforce_lead] 

INSERT INTO @LeadsVS3
    SELECT 
        Lead_id, 
        (more columns…)
        OrderID__c,
        City__c
    FROM
        [ReplicatedVS3].[dbo].[Lead]
    WHERE
        UpdateDate > @LastUpdateDate

(代码是一个更大的SP的一部分)

enter image description here

enter image description here

这是一项每15分钟运行一次的工作......除了不那么频繁地完成工作之外,还有其他改进吗?

1 个答案:

答案 0 :(得分:0)

您发布的执行计划似乎是估算的执行计划。 (实际执行计划包括实际行数)。如果没有实际的计划,就不可能分辨出真正发生的事情。

明显改进 将在Lead.leadid上添加覆盖非聚簇索引,其中包括SELECT语句中的其他列。现在,您扫描最宽的索引(您的聚集索引)以检索可能的小百分比记录。将群集扫描转变为非群集搜索将是巨大的。

在同一个注释中,您可以将该索引设为过滤索引,该索引仅包含大于上一个UpdateDate的日期的记录。然后设置一个常规SQL作业,定期重建它以过滤更新的日期。

您可以采取的其他措施来提高插入效果:

  1. 在插入之前删除所有约束和/或索引,然后重建 他们之后。
  2. 使用较小的数据类型