2012-09-23 95 views
6

我有一個user_info表在五個不同的位置。現在我需要將所有行整合到一箇中央user_info表中。爲此,我需要源表中每行的唯一標識。因爲當所有行進入中央表格時,每個用戶都必須擁有唯一的ID。SQL Server如何使用NEWID創建uniqueidentifier()

現在我的問題是:

  1. 如果我使用uniqueidentifierNEWID()每個源表則這將是唯一的全球&續航時間或有任何機會被複制?

  2. SQL Server如何創建NEWID()?我需要知道關鍵的生成結構。

回答

7

是的,機器之間不存在重複的機會。

NEWID()基於僞隨機號碼(來自時鐘)和主NIC的MAC地址的組合。

但是,將這樣的隨機數插入表中的聚簇鍵對於性能來說是非常糟糕的。您應該考慮NEWSEQUENTIALID()或COMB類型的函數來生成GUID,這些GUID仍可提供NEWID()的衝突避免好處,同時仍保持可接受的INSERT性能。

+1

關於什麼windows API調用SQL Server用於'NEWID'的任何文檔?我知道'NEWSEQUENTIALID'使用MAC地址,因爲[在GUID中清晰可見](http://stackoverflow.com/a/3398847/73226),但是看不到NEWID的任何文檔。 –

+0

'CoCreateGuid'最有可能? Eric Lippert有一篇關於GUID的[博客文章系列] [1]。另見:http://stackoverflow.com/questions/39771/is-a-guid-unique-100-of-the-time對於NEWID(),第三部分的第一個十六進制數字總是4(當我嘗試它),對於'NEWSEQUENTIALID()'它使用上面提到的MAC地址。我不記得在計算機中沒有MAC地址時會發生什麼 - 在這種情況下,有人知道SQL中發生了什麼? [1]:http://blogs.msdn.com/b/ericlippert/archive/2012/05/07/guid-guide-part-three.aspx – Seph

+0

newid()使用的準確時間是多少?這聽起來像是如果我在同一時間獲取兩個ID,我應該得到一個副本,但我從來沒有見過它發生。 – jumxozizi

相關問題