2012-11-28 50 views
1

我有一個簡單的映射表和兩個外鍵列(CategoryId int, ProductId int)。主鍵應用於兩列。聚簇索引的列順序如何影響性能

雖然每個產品可以有一個以上的類,它是罕見永遠有更多的 大於2類別,而另一方面,常見的有10K +產品。

主鍵的列順序如何影響性能?

表的常見用法是基於類別產品:

SELECT ProductId FROM [table] WHERE CategoryId = @catid 

我明白,如果這是一個非聚集索引,我想CategoryId首先從上面的查詢獲得最佳性能。這與集羣索引一樣嗎?

回答

3

是的,聚集索引也是如此。聚類確定行的物理順序。按照這種順序排列表可以幫助大多數表上的I/O,因爲可以通過快速順序I/O而不是隨機訪問來讀取行和頁。

在這種情況下,如果您還需要獲取單個產品的類別,則可以在(CategoryId,ProductId)上定義聚簇索引,並在(ProductId,CategoryId)上定義非聚簇索引。請注意兩個索引如何具有相同的密鑰。如果映射表只有2列,那麼兩個索引上的索引頁將具有完全相同的數據 - 只是按不同的順序排列。非聚集索引在這裏應該表現得非常好,因爲SQL Server不需要執行書籤查找來獲取行中的其他數據。

相關問題