2012-06-07 117 views
0

我有一個簡單的表格,有兩列,一個是int identity主鍵和一個varchar(64)。我在VarChar列上添加了一個唯一的約束/索引來強制執行唯一性。常規查詢模式是查詢列的值,然後使用連接中的PK值查找其他表中的其他數據。SQL Server唯一索引和查詢?

使非聚簇索引唯一有沒有速度優勢?

在非聚集索引中包含PK列還是已經存在,因爲它首先是聚集PK?

謝謝。

+0

是的 - 使非聚集索引唯一是有意義的。假設你的主鍵是聚集在一起的 - 那麼就不需要將它明確地包含在非聚集索引中 - 聚簇鍵就是每個非聚集索引的一部分 - 總是。 –

回答

2

您不需要將PK添加到任何非聚集索引。正如你指出的那樣,所有非聚集索引已經包含了PK。

是的,擁有一個唯一的約束將會提高查詢索引時的性能,因爲如果查詢優化器知道只有一個匹配,查詢優化器可以使用不同的機制來查找數據。

+2

另外,擁有一個唯一的約束將永遠節省您的空間。 SQL必須能夠唯一地標識每一行。但節省的空間相當小。 http://www.sqlpassion.at/blog/PermaLink,guid,4ee5bcc5-7340-4262-9fc2-73773c7f5720.aspx – Zhenny

+3

非聚集索引包括**集羣密鑰** - 不是主鍵。是的 - 在默認情況下,大部分時間,這是同樣的事情 - 但要清楚 - 它是聚集鍵,它是每個非聚集索引的一部分(並且可能與PK不同 - 在極少數情況下) –

+0

marc_s yes you是正確的,我應該在我的問題中指出這一點。謝謝。 – Snowy