2012-03-13 31 views
0

在數據庫上生成主鍵或在應用程序代碼中生成主鍵時,尤其是在爲鍵使用GUID/UniqueIdentifier數據類型時,「更好」是什麼?在數據庫中創建Guid PK。代碼

我已經閱讀了使用Guid和int數據類型之間的區別,它聽起來像Guids對於所謂的「離線生成」是可行的。

E.g.

而不是在數據庫中有一個NEWID() contstraint。在一個項目中(我們使用實體框架),我們在應用程序代碼Guid.NewGuid()中使用插入數據時生成PK。

這是一個壞方法嗎?

我的擔憂是:

  • 數據庫索引:數據庫性能,因爲標識的可能不是連續
  • ,關鍵是已經使用了一個64十億機會。 (考慮到應用不會很大,但可能需要增長空間)
  • 也許還有其他缺點?

回答

1

以及實際上,GUID可能是從SQL Server 2005的順序有名爲NEWSEQUENTIALID()功能,鏈接here

創建一個GUID比以前提供的 這個函數生成的任何GUID更大自Windows啓動以來指定的計算機。在 重新啓動Windows之後,GUID可以從較低範圍重新開始,但 仍然是全局唯一的。當使用GUID列作爲行 標識符時,使用NEWSEQUENTIALID可能比使用NEWID 函數更快。這是因爲NEWID函數會導致隨機活動 並使用較少的緩存數據頁面。使用NEWSEQUENTIALID還有助於 完全填充數據和索引頁面。

+0

是的我知道NEWSEQUENTIALID()對不起這就是我的意思是「NEWID()」這並不真正對我的問題說,是在數據庫中還是在代碼中創建更好,或者可以在代碼中創建嗎? – John 2012-03-13 08:13:05

+0

我認爲可以在代碼中創建。據我所知,guid是基於服務器的時間,MAC地址或IP地址(不確定)生成的。想不出任何關鍵的區別。 :) – fengd 2012-03-13 08:23:04