SQL Server更新Where子句使用聚簇索引的性能

时间:2015-08-06 20:01:15

标签: sql sql-server

我有一个类似下面的更新查询,只有当当前日期少于传递日期时才更新AccessDate。该表在Id上有一个聚簇索引。

在Id,AccessDate上有另一个非聚集索引是否有用?

Update Person
Set AccessDate = @NewAccessDate
Where Id = @Id
And AccessDate < @NewAccessDate

1 个答案:

答案 0 :(得分:0)

在大多数情况下,我会说如果没有索引,更新会更快。关键考虑因素是索引本身也需要通过声明进行更新。

一个缓解因素是每个// Call AppActions.dispatchMessage(message);有很多很多id s,而且非常非常少,只有AccessDate。例如,如果每个id有10,000行,并且只有1个匹配条件,则更新索引可能比扫描所有访问日期更快。

或者,类似地,如果大多数@NewAccessdate没有id子句的匹配记录。

我不确定当一个好或不好时截止值是多少 - 它取决于其他因素,例如您的硬件和每页的记录数。但鉴于存在权衡,你可能不会放入索引。