我試圖將我的設計感受從LAMP堆棧轉移到Microsoft堆棧,並且我只想到了一些東西 - 何時我想要使用GUID?它與舊的,可靠的自動遞增int相比有什麼好處/缺點?GUID與int ID自動增量
回答
除了autoincremental ID之外,您的體驗永遠不需要任何東西,這可能意味着GUID通常是解決問題的方法。使用它們的時候,如果你碰到一個你熟悉的模式不起作用的需求。微軟是無關緊要的。
我見過的唯一現實場景是合併來自兩個來源的表格。
一個問題的GUID:
因爲他們不是連續的,該數據庫將不得不努力工作,以更新索引。使用順序標識符,通常可以將其附加到最後(或多或少)。由於GUID是隨機的,因此必須將其放入現有的塊中。也就是說,我們對某些表使用GUID,即使在相當重的負載下它們似乎也能正常工作。
好了,但是當我想用他們? – 2011-03-31 11:34:02
順序guid解決這個問題,例如http://stackoverflow.com/questions/170346/what-are-the-performance-improvement-of-sequential-guid-over-standard-guid – Douglas 2015-06-17 13:47:56
「舊的,可靠的自動遞增的int」取決於數據庫需要的可擴展性。當您至少有兩個主設備的設置時,自動遞增停止在平凡的情況下工作。當然,解決這個問題並不難,因爲這是一個普遍的問題。不同的數據庫引擎可以協調主設備之間的順序,例如,只有一個主設備可以從任何給定的順序分配。
當你分解數據時,通常需要知道鍵的分片。自動遞增的ID不包含有關哪個分片應該託管該記錄的信息。
GUID以不同的方式解決問題;兩個不同的主設備具有不同的主機標識符(通常是一個MAC地址)。由於用於計算新的GUID,所以不同的主人不能創建相互衝突的guid。此外,因爲主機是ID的一部分,所以它可以用來直接標識保存記錄的分片。
第三種選擇是根本不使用代理鍵(既不自動增加整數也不使用guid)。
我建議使用int ID代替的Guid,原因如下:
- 詮釋ID的大小爲4個字節(32位),然而的Guid具有16個字節(128位)的尺寸,其4倍大。在這種情況下,你可能有性能問題和存儲implaication
- 默認的GUID不連續(要小心)
- 很容易想象表 之間的聯繫和關係
- 1. Int自動增量主鍵和GUID列
- 2. GUID +自動增量ID =性能較差?
- 3. Id自動增量varchar不增量
- 4. 自動增量ID C#
- 5. 如何自動增量ID
- 6. 二級ID自動增量
- 7. 自動增量ID練習
- 8. MongoDB自動增量ID
- 9. 將字符串轉換ID爲int自動增量
- 10. 自動增量ID插入數據ORMLITE
- 11. XML文件中的自動增量ID
- 12. 重構在** SQL DB中自動增加ID到GUID DB
- 13. 創建的PreparedStatement自動增量ID
- 14. 自動增量分配的ID
- 15. 從JDBC獲取自動增量Id
- 16. 遺產與自動增量
- 17. 自動增量與休眠
- 18. 不能與自動增量
- 19. 自動增量與外鍵
- 20. PHP,SQL自動與增量
- 21. Symfony2 Doctrine2自動增量字段與自定義ID生成器
- 22. 自動增量ID未插入
- 23. 使用insert_id獲取自動增量ID
- 24. 自動增加ID
- 25. 自動遞增ID
- 26. SQL再生ID保持自動增量
- 27. MongoDB和Nodejs插入ID自動增量
- 28. 通過ODBC檢索自動增量ID
- 29. Microsoft SQL重置ID自動增量
- 30. 在java中生成自動增量ID
Guids對種子數據來說非常好 – 2013-04-12 13:21:12