主键和索引 - 查询性能

时间:2014-02-12 03:10:09

标签: sql sql-server indexing primary-key

我有一张包含超过100万条记录的表格。表中没有定义键。 但是我们确实定义了聚簇索引和非聚簇索引。

我想知道在执行SELECT查询时是否实际上会有性能提升,并且包含我们在WHERE子句中创建索引的列?

是否必须使用主要/唯一密钥来利用索引的真正好处?

表格详情:

  • 260列
  • 无钥匙
  • 未定义任何标识列。
  • 未定义rowguidcol列。
  • 1个聚簇索引和1个非聚簇索引

查询:

select * 
from employee(nolock)
where employeeID = '15' and employeeType = 'FT' 

1 个答案:

答案 0 :(得分:0)

根据我的经验,聚集索引在狭窄,独特且不变的情况下是最佳的。群集密钥越小(非唯一聚簇索引添加4字节“uniquifier”)越好,因为它会在后续的非聚簇索引上创建更密集的叶子页面。

假设您当前在一个整数上有一个非唯一的聚簇索引(假设employeeID是一个整数),那么每个键的大小实际上是加倍于uniquifier(4来自整数,4来自uniquifier)。

非唯一/唯一聚簇索引之间的区别在于非聚簇叶行分别适合页面的1000和2000行。更密集的非聚集叶页面意味着更快地遍历索引级别以及节省磁盘空间(4byte处的1000000行保存一行大约相当于每个非聚集索引3 gig)。

这很大程度上取决于你桌子上的假设。

TLDR:窄聚簇索引键最好;使其成为强制唯一性并防止浪费的4字节无统一者的主要关键。