聚集索引是否会提高对该聚集索引按顺序执行的更新的性能?

Ben*_*cka 6 index sql-server

我知道索引会降低数据修改性能,但我有一项任务,其中(几乎)所有更新都是按顺序对项目进行的。聚集索引会提高还是降低更新这些行的性能?

聚集索引将在列上id,其中id是一IDENTITY列。id因此永远不会改变并且将是连续的(此外,永远不应该删除行)。这是我的更新语句的格式:

UPDATE [table] SET value = 1 
WHERE  id IN (1,2,3,4...)
Run Code Online (Sandbox Code Playgroud)

然而,这些值不一定是连续的。IN (1,2,4,5)如果id=3未设置为更新,则也可以使用 的序列,但它们将始终按顺序排列。

当所有更新都按顺序进行时,聚集索引会提高还是降低性能?

gbn*_*gbn 5

像这样的 IN 是一组离散值。SQL Server 不会费心计算它是一个范围或检查升序值。

也就是说,x IN (1,2,4,5)被解析为x=1 OR x=2 OR x=4 OR x=5. OR 在大多数情况下是不可 SARGable 的,并导致扫描而不是搜索。

如果您将数据放入带有索引的临时表中,x IN (SELECT foo FROM #bar)然后它就变成了半连接,并且更有可能使用索引