2017-04-05 18 views
0

我有一個包含2列的關鍵表:KeyIdSQL Server執行計劃建議創建一個包含表中所有列的索引

在我寫了一個存儲過程,我的代碼加入Employee表到Key欄,然後選擇Id - 是這樣的:

SELECT 
    E.EmployeeName, K.Id 
FROM 
    Employee E 
JOIN 
    KeyTable K ON E.Key = K.Key 

執行計劃建議創建下列指標:

[schema].[Employee] ([Key]) INCLUDE ([Id]) 

我的問題是爲什麼?如果所有信息都在表格中,爲什麼要創建索引並複製該信息?

+1

它是一個堆表嗎?它沒有主鍵? – Lamak

+0

@Lamak沒錯,它沒有主鍵。 –

+0

那張桌子有多大?查詢運行緩慢嗎? –

回答

2

僅僅因爲所有的信息都是「在表格中」,這並不意味着搜索整個表格的將成爲獲取該查詢結果的最有效方式。

在這裏,服務器說,如果它有一種方法來快速查找表中的行,給定Key值,那麼查詢應該能夠更快地被處理(而不是它的100%可靠性建議,所以你應該在實施之前測試)。

如果表是堆(無聚簇索引),或者聚簇鍵與查詢的期望訪問順序不匹配的聚簇表,則可以爲真。


另外,如果你想想看 - (非羣集)的索引複製信息。通常它只是信息的一個子集,而不是整個集合。

+0

這是非常真實的,我忘記了索引與掃描,並且有點過於關注計劃要求所有列的事實。非常感謝你 :) –

相關問題