我正在执行以下声明:
UPDATE TOP(1) dbo.userAccountInfo
SET Flags = Flags | @AddValue
WHERE ID = @ID;
列'ID'是具有IDENTITY约束的INT PRIMARY KEY。 标志是BIGINT NOT NULL。
执行路径表示正在发生聚集索引更新。一个非常昂贵的操作。 除主键外,没有包含Flags或ID的索引。 我觉得实际的执行路径应该是:
Clustered Index Seek =>更新
答案 0 :(得分:28)
表有两种形式:聚簇索引和堆。您有一个PRIMARY KEY约束,因此您已隐式创建聚簇索引。在表格创建期间,您必须为此而不是创建额外的长度。 “表”的任何更新都是聚簇索引的更新,因为聚簇索引 表。 至于聚集索引更新是一个“非常昂贵的操作”,现在这是一个城市传说,围绕着关于数据库如何工作的基本错误信息。正确的语句是'影响聚簇键的聚簇索引更新必须更新所有非聚簇索引'。
答案 1 :(得分:12)
聚簇索引是物理表,因此每当您更新任何行时,您都要更新聚簇索引。