2014-02-12 43 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的唯一性的主要關鍵。