主键索引

时间:2018-06-26 08:14:33

标签: sql-server indexing

由于SQL Server中主键的默认聚集索引,在表中搜索主键列是否比在非主键列中搜索更快?

4 个答案:

答案 0 :(得分:2)

来自上一个问题; “我们为表指定键的原因主要是为了提高数据的完整性和数据的实用性。键确保表中没有重复的数据,因此,它们使数据的用户/使用者可以正确地识别信息。DBMS查询优化器并且存储引擎旨在利用键的优势,因此拥有键也将为您的DBMS提供有效执行某些查询的最佳机会,但不能保证添加键在每种情况下都会提高性能。

话虽这么说,但在大多数情况下,索引的存在应使搜索速度更快,但与关键字本身无关。

答案 1 :(得分:0)

根据索引进行搜索通常比不使用索引进行搜索要快(除非您的表非常小,或者索引处于可怕的状况)。该索引还支持主键这一事实与本讨论无关。

答案 2 :(得分:0)

通常,关系数据库将进行优化以有效地使用主键,但是您的数据库结构,查询以及在哪个平台上的哪个数据库引擎都是性能的主要因素。

此外,如果未对非主键列进行索引,则无论您进行何种查询,其速度都将降低几个数量级。

答案 3 :(得分:0)

  

在表中搜索主键列比搜索   非主键列,因为主键上具有默认的聚集索引   SQL Server中的键?

由于优化器不在乎索引是否支持约束,因此我将问题解释为:

  

使用聚簇索引键列进行搜索比通过a进行搜索更快   非聚集索引键列?

基于磁盘的聚集索引查找表是返回整个行的最快方法(1)用于单例查找,2)用于键范围搜索。这样可以最大程度地减少定位和检索行所需的逻辑读取次数。

SQL Server使用群集作为主键索引的默认值,以利用此性能优势并鼓励所有表应具有群集索引的做法。另外,由于聚集索引键作为行定位器隐式包含在所有非聚集索引中,因此非聚集索引覆盖查询的可能性增加。

这并不是说主键应该始终是聚簇索引。当查询最经常在join / where子句谓词中使用其他列时,可能会有更好的选择。