2012-07-02 59 views
1

在選擇索引鍵在SQLServerpedia文章我發現下面幾行:排序列的

由於表中的數據按聚集索引的結構是有序的,該指數建立在last_name,first_name的行爲與在first_name,last_name上創建的行爲不同。應該首先指定最具選擇性的列。

爲什麼?爲什麼a,b上的索引不同於b上的索引?組合的唯一性無論如何都是一樣的,那麼爲什麼要指定一個先發生得更少的呢?

+2

解釋可以在這裏找到(http://sqlserverpedia.com/wiki/Index_Selectivity_and_Column_Order)。 –

+0

優秀的鏈接。謝謝! – SexyBeast

回答

4

唯一性是相同的,但文章提到的行爲。想想電話簿。如果你正在尋找約翰史密斯,先找到姓氏=史密斯更容易,然後縮小爲名字=約翰。試着以另一種方式去做...找到所有的約翰,然後找出哪些是史密斯?

因此,如果您通常是按姓氏搜索人羣,那麼按姓氏和名字對索引進行排序是有意義的。這樣,所有相同的姓氏將在同一組索引頁上。

這顯然適用於唯一索引和非唯一索引。無論訂單是什麼,索引關鍵字列的唯一性都會被強制執行。同時請記住,並不總是需要將所有列都作爲密鑰的一部分 - 有時將它們作爲包含列是有好處的。

我也不認爲你的索引在這個特定情況下應該是唯一的,因爲你不可能阻止John Smiths註冊你的通訊或在你的公司工作,或加入你的戰鬥俱樂部 - 最後/第一不是一個好鑰匙。

+0

謝謝。這很有幫助。 – SexyBeast

+1

可能應該提到聚簇鍵和主鍵不必是相同的,並且聚簇鍵不必是唯一的。首先在密鑰中選擇最具選擇性的列的原因與SQL服務器內部有關。選擇姓氏,名字作爲羣集密鑰的原因是你最可能執行哪種查詢類型。 –