在sql查询中添加具有索引列的条件确实提高了查询性能?

时间:2014-02-24 10:51:07

标签: c# sql sql-server sql-server-2008

我在使用条件为Identity column的此查询更新记录时遇到问题,

update TableName Set ColumnName = 'value' where ID = value

我的问题是在编码确实提高查询性能的地方添加Index column? 像这样:

update TableName Set ColumnName = 'value' where ID = value and IndexColumn = 'indexColumnValue'

1 个答案:

答案 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'

它将由第一个更新,而不是由第二个更新。

性能很重要,但实际执行正确的功能更为重要。