我在使用条件为Identity column
的此查询更新记录时遇到问题,
update TableName Set ColumnName = 'value' where ID = value
我的问题是在编码确实提高查询性能的地方添加Index column
?
像这样:
update TableName Set ColumnName = 'value' where ID = value and IndexColumn = 'indexColumnValue'
答案 0 :(得分:1)
这只会在特殊情况下提高绩效
正如Luaan指出的那样,标识栏可能是主键,并且肯定是唯一的,所以它足以识别它自己的行。
然而,在特殊情况下,标识列上的索引不是聚集的,而[IndexColumn]上的索引则应该会有很小的性能提升(尽管不要说任何戏剧性的事情)。
如果身份索引是非聚集的,并且有像
这样的索引 CREATE CLUSTERED INDEX Clustered_i ON TableName (IndexColumn ,ID)
或者
的过滤索引CREATE INDEX Filtered_i ON TableName (ID) WHERE IndexColumn = 'indexColumnValue'
然后您可能会注意到一个小的改进,但在正常情况下,只使用Identity列上的索引将会尽可能快地获得。
但真正的区别在于性能。这些查询功能不同 如果有记录
ID = value and IndexColumn <> 'indexColumnValue'
它将由第一个更新,而不是由第二个更新。
性能很重要,但实际执行正确的功能更为重要。