2008-11-01 92 views

回答

46

一般來說,int

bigint如果你認爲你將有更多的行比宇宙中的原子。

uniqueidentifier,如果你需要全球唯一的密鑰(即保證是在所有表中的唯一模式中的鑰匙,甚至是唯一的(我不記得了))

另外兩個我非常有用不會使用他們不是整數類型(他們有分數,這只是沒有多少意義上的關鍵)

+4

如果您選擇了唯一標識符,請考慮將其設置爲NONCLUSTERED主鍵,否則插入可能會出現性能問題。 – Brannon 2008-11-01 06:34:24

+0

感謝Brannon的升級。 – 2008-11-01 16:18:40

+2

int僅限於'僅'約二十億。 我已經達到這個極限,有一些日誌記錄功能;) – Mose 2009-11-26 10:44:07

2

一個巨大的原因不使用GUID的PK是他們可怕的索引頁填充率 - 這種濫用可能會大大增加您的I/O性能成本。應該將GUID留作AK,並在可能的情況下用int衍生的PK驅動查詢。

0

對於32位處理器,int可能是最有效的處理大小。

20

你真的需要保留分開兩個不同的問題:

1)主鍵是一個邏輯結構 - 唯一和可靠地識別你的表中的一行重點候選人之一。這可以是任何東西,真的 - 一個INT,一個GUID,一個字符串 - 選擇對你的場景最有意義的東西。

2)聚集鍵(列或定義表上的「聚集索引」列) - 這是一個物理存儲相關的事情,在這裏,一個小的,穩定的,持續增長數據類型是您的最佳選擇 - INT或BIGINT作爲默認選項。

默認情況下,SQL Server表上的主鍵也用作集羣鍵 - 但這並不需要這樣!我個人認爲,隨着時間的推移,將以前基於GUID的主集羣密鑰分解爲兩個單獨的密鑰(GUID上的主(邏輯)密鑰)和單獨的INT IDENTITY(1上的集羣(排序) ,1)欄。

索引碎片下降到最低水平,因此索引查找性能已升高 - 強烈推薦!

馬克

1

爲準,以滿足您的特定需求