我正在执行以下语句:

UPDATE TOP(1) dbo.userAccountInfo
SET           Flags = Flags | @AddValue
WHERE         ID = @ID;


“ ID”列是具有IDENTITY约束的INT PRIMARY KEY。
标志是BIGINT NOT NULL。

执行路径表明正在发生聚集索引更新。一个非常昂贵的操作。
除主键外,没有覆盖Flags或ID的索引。
我觉得实际的执行路径应该是:

聚集索引查找=>更新

最佳答案

表有两种形式:聚集索引和堆。您具有PRIMARY KEY约束,因此您隐式创建了聚簇索引。在创建表的过程中,您将不得不花费额外的时间,以免发生这种情况。 “聚集表”的任何更新都是聚集索引的更新,因为聚集索引是表。
至于聚簇索引更新是一个“非常昂贵的操作”,现在这已成为城市传说,围绕着有关数据库工作原理的基本错误信息。正确的陈述是“影响聚簇键的聚簇索引更新必须更新所有非聚簇索引”。

关于sql - 为什么要引起聚集索引更新?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/895879/

10-10 18:35
查看更多