删除和插入性能 SQL Server

VK_*_*217 1 performance sql-server-2008 sql-server linked-server query-performance

我有以下存储过程需要将近一个小时才能完成。结果集大约有 20 万台机器。

我所做的只是从链接服务器中提取一组 id,在本地服务器中删除这些 id,然后从远程服务器中提取这些 id 的所有详细信息并插入它们。INSERT 占 90%,DELETE 表占 9%,SELECT INTO 占 1%。

id 是主键/聚集索引。

    DECLARE @ProcessDate DATETIME
    SET @ProcessDate = CONVERT(VARCHAR(10), DATEADD(DAY, -3,
                                                    GETDATE()), 111)

    SELECT  DISTINCT id
    INTO    #temp_machines
    FROM    remote_server.db.dbo.table1
    WHERE   dt_modify >= @ProcessDate

    DELETE  FROM local_server.db.dbo.table2
    WHERE   id IN ( SELECT id  FROM  #temp_machines )

    INSERT  INTO local_server.db.dbo.table2
    SELECT  *
    FROM    remote_server.db.dbo.table1
    WHERE   id IN ( SELECT id  FROM  #temp_machines )
Run Code Online (Sandbox Code Playgroud)

有什么关于提高性能的建议吗?

Eri*_*ing 5

第一步:确保有一些东西需要调整,并且您的查询不仅仅是被阻止。您可以使用sp_WhoIsActivesp_BlitzFirst等免费工具(免责声明,我是 First Responder Kit 的贡献者)来执行此操作。

第二步:不要使用局部变量

第三步:也许索引临时表会有所帮助。

第四步: 使用 sp_BlitzFirst检查您的等待统计数据(同样的免责声明,我对此做出了贡献,等等等等)。可能是所写的查询很好,但您遇到了其他一些问题,例如 tempdb 争用。