我通常使用:
UPDATE table1 SET field1='test' WHERE ID=10但使用以下声明会更有效吗?
UPDATE TOP (1) table1 SET field1='test' WHERE ID=10如果我有很多记录?
ID列是主键,也是自动递增的。
发布于 2019-12-02 13:24:10
如果ID列是主键,那么最多只有一个受UPDATE查询影响的记录。
如果主键在默认情况下是聚集索引,那么在这两种情况下性能应该是相似的。
即使在创建PK时,将其指定为非集群,但在搜索/选择/识别/过滤记录时(因为您使用的是WHERE),仍然可以提高性能。这可能没有聚集索引PK那么快,但是性能差异应该可以忽略不计。
在创建PK时,您必须为您的键选择两种索引类型之一,如mentioned and explained here in more detail。
因此,两个版本的UPDATE查询都应该具有相似的性能(由于其他辅助操作,在不同的情况下运行时可能会有很小的差异)。
结论:
如果您的ID列中有一个主键,并且在查询的FILTERING部分(WHERE)中使用它,那么当您查询数千条、数百万条甚至可能高达数十亿条记录时,应该会很好。
免责声明:
UPDATE查询的性能/速度还取决于需要更新哪些其他索引,原因是值的更改(包含field1作为其键的索引)、表上的触发器、外键的级联规则等等。
https://stackoverflow.com/questions/59139764
复制相似问题