我有一个类似下面的更新查询,只有当当前日期少于传递日期时才更新AccessDate。该表在Id上有一个聚簇索引。
在Id,AccessDate上有另一个非聚集索引是否有用?
Update Person
Set AccessDate = @NewAccessDate
Where Id = @Id
And AccessDate < @NewAccessDate
答案 0 :(得分:0)
在大多数情况下,我会说如果没有索引,更新会更快。关键考虑因素是索引本身也需要通过声明进行更新。
一个缓解因素是每个// Call AppActions.dispatchMessage(message);
有很多很多id
s,而且非常非常少,只有AccessDate
。例如,如果每个id有10,000行,并且只有1个匹配条件,则更新索引可能比扫描所有访问日期更快。
或者,类似地,如果大多数@NewAccessdate
没有id
子句的匹配记录。
我不确定当一个好或不好时截止值是多少 - 它取决于其他因素,例如您的硬件和每页的记录数。但鉴于存在权衡,你可能不会放入索引。