【问题标题】:Performance by using UPDATE / UPDATE TOP (1)使用 UPDATE / UPDATE TOP 的性能 (1​​)
【发布时间】:2020-03-27 02:46:44
【问题描述】:

我平时用的是:

UPDATE table1 SET field1='test' WHERE ID=10

但是使用以下语句会更有效吗:

UPDATE TOP (1) table1 SET field1='test' WHERE ID=10

如果我有很多记录?

ID 列是主键,也是自动递增的。

【问题讨论】:

  • UPDATE 中使用TOP 是一项已弃用的功能。不用担心性能(如果ID 被索引,在任何情况下都不会出现性能问题,在您的情况下就是这样),只是不要使用它。
  • 如果列是主键,SQL Server“知道”只有零个或一个匹配键,不会导致表扫描。您应该能够在查询计划中看到这一点。

标签: sql-server


【解决方案1】:

如果ID 列是主键,那么您的UPDATE 查询最多会影响一条记录。

如果您的主键默认是聚集索引,那么这两种情况下的性能应该相似。

即使在创建 PK 时将其指定为非集群,那么在搜索/选择/识别/过滤记录时您仍然可以获得性能提升(因为您使用的是WHERE)。这可能不如聚集索引 PK 快,但性能差异应该可以忽略不计。

创建 PK 时,您必须为键选择两种索引类型之一,如 mentioned and explained here in more detail

因此,UPDATE 查询的两个版本应该具有相似的性能(由于其他辅助操作,在不同场合运行时可能存在细微差异)。

结论:

如果您的 ID 列上有一个主键,并且您在查询的 FILTERING 部分 (WHERE) 中使用它,那么当您查询数千、数百万甚至可能甚至多达数十亿条记录。

免责声明:

UPDATE 查询的性能/速度还取决于需要更新哪些其他索引,这是由于值的变化(包含field1 作为键的索引)、表上的触发器、级联规则外键等

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 1970-01-01
    • 2011-06-29
    相关资源
    最近更新 更多