我知道索引会降低数据修改性能,但我有一项任务,其中(几乎)所有更新都是按顺序对项目进行的。聚集索引会提高还是降低更新这些行的性能?
聚集索引将在列上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未设置为更新,则也可以使用 的序列,但它们将始终按顺序排列。
当所有更新都按顺序进行时,聚集索引会提高还是降低性能?
像这样的 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)然后它就变成了半连接,并且更有可能使用索引
| 归档时间: |
|
| 查看次数: |
655 次 |
| 最近记录: |