2009-09-29 81 views
1

如果您有一個表,最多10條記錄,並且它在許多其他表(通過FK關係)中引用,並且每個表中至少有1,000,000條記錄。GUID vs Int

如果複製永遠不會被使用,你會推薦什麼類型的PK(GUID或tinyint)? 我碰到this page與followng摘錄:

的GUID SQL Server上可以執行比數值類型快,一旦你超過 約100000現代五金行。這是由於索引 優化(的GUID塊的級聯)MS已經實施

是真實的GUID會在我的情況下執行得更快?

在此先感謝;)

回答

3

INT會更快 - 毫無疑問。並且使用更少的空間(好吧,有10行,這實際上並沒有太大差別)。

INT是IMO也有很多更容易使用:

SELECT (list of fields) 
FROM dbo.MyTable 
WHERE ID = 5 

只是一大堆更容易編寫和記憶比

SELECT (list of fields) 
FROM dbo.MyTable 
WHERE OID = '8D1E4C8C-54B9-4EB2-B123-FC07E340EC7B' 

所以我幾乎總是(以+ 95%案件)把我的投票在INT而不是GUID。由於GUID作爲SQL Server中的集羣鍵(主鍵默認使用)對於性能來說非常糟糕(請閱讀GUIDs as Primary Keys and/or the clustering key博客文章「The Queen of Indexing」,Kimberly Tripp關於該主題的背景信息),但是,我只是試圖讓它成爲一種習慣,儘可能使用INT(可能:INT IDENTITY)作爲我的主鍵和集羣鍵。

Marc

3

如果有疑問,檔案。但是在表格中有10行,我懷疑你會發現任何不同。

+0

我打算設計這個數據庫,所以使用配置文件不是一個好主意 – 2009-09-29 10:52:29

0

如果你能保證你的表永遠不會有超過10條記錄,那麼我會堅持使用整數。評論似乎只對非常大的表格(> 100,000行)有關。

3

小N的一切都很快。只需使用與數據庫其餘部分一致的PK類型。

4

對於引用table_with_10_rows的表中的行計數,如果這些表的行數超過10萬行,它可能不會有任何說法。

+0

你的意思是GUID執行速度更快?如果是這樣,你能告訴我爲什麼? – 2009-09-29 10:55:54

0

你應該考慮的另一個選擇是使用tinyint代替int。看到這裏的爭論和反對:SOF question