2014-02-12 44 views
0

我有一个包含超过100万条记录的表。表中没有定义键。 但是我们确实已经定义了聚簇索引和非聚簇索引。主键和索引 - 查询性能

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

是否必须具有主键/唯一键才能充分利用索引的真正优势?

表的细节:

  • 260列
  • 没有键
  • 没有定义标识列。
  • 没有定义rowguidcol列。
  • 1聚集索引和1个非聚集索引

查询:

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

请提供表格布局以及您尝试运行的查询示例。 –

+0

260列 否键 未定义标识列。 没有定义rowguidcol列。 1聚集索引和1非聚集索引 select * from员工(nolock) 其中employeeID ='15'和employeeType ='FT' – Sammy

+1

聚集/非聚集索引中使用的列和数据类型是什么? – deeg

回答

0

个人根据我的经验,聚集索引是最好的时候,它的狭小,唯一且不可更换。聚簇键(非唯一聚簇索引添加一个4字节的“唯一值”)越小越好,因为它在随后的非聚簇索引上创建了更密集的叶页。

假设您目前在整数上有一个非唯一聚集索引(假设employeeID是一个整数),那么每个键的大小实际上是双倍于分离器的数量(整数为4,分离器为4)。

非唯一/唯一聚集索引之间的区别是非聚集叶行分别适合页面上的1000行和2000行。密集的非群集页面意味着可以更快地遍历索引级别,并节省磁盘空间(一行中保存4行1000000行,每个非聚簇索引约为3个演出)。

很多这是基于您的桌子上的假设。

TLDR:窄聚簇索引键最好;使其成为强制执行唯一性并防止浪费4byte的唯一性的主要关键。