是否有特定的策略或最佳实践可用于加快 SQL Server 中的更新操作,特别是在处理大型数据集或复杂的更新条件时?
我利用
SqlBulkCopy
来提高多个插入查询的速度。现在,我正在尝试提高多个更新查询的执行速度。我已经探索了 MERGE
语句作为一个选项,但我不确定它与传统更新查询相比的相对速度。
使用正常更新查询的结果:
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 0 ms.
SQL Server parse and compile time:
CPU time = 0 ms, elapsed time = 24 ms.
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 15 ms.
(101 row(s) affected)
使用
MERGE
更新查询的结果:
SQL Server Execution Times:
CPU time = 0 ms, elapsed time = 62 ms.
(101 row(s) affected)
SQL Server 性能通常取决于索引。就您而言,索引可能会在两个地方对您有所帮助或有害:
您是否正在搜索要根据属于索引的列进行更新的记录?如果没有,您可以尝试创建临时索引(确保完成后删除它或在这些列上添加永久索引。如果您正在搜索的值是clustered索引的一部分,那么它将甚至更快,但每个表只能有一个聚集索引,因为该索引决定了记录的物理顺序。
您是否正在更新属于其他索引的列?这会稍微减慢速度,因为这些索引必须更新。
除此之外,您还必须让 DBA 查看查询计划和其他统计信息,看看是否有任何可以优化的地方。仅仅看 SQL 通常是不够的。
就
UPDATE
与 MERGE
而言,如果您仅更新记录,那么 MERGE
的执行速度可能不会比直接更新快。事实上,它可能会执行得更慢,因为它会看到哪些记录需要进行 INSERT
ed,如果您只更新记录,这将是浪费时间。