回答
幾乎肯定是一個自動遞增整數。創建速度更快,搜索速度更快,體積更小。舉個例子,如果你有另一個引用它的表。你想讓它通過一個整數主鍵或通過sha1散列來引用它嗎?一個整數會更有意義(以某種方式),並且它會更加有效(太多了!)。
再次感謝!正如我在一張桌子上存放一個sha1,我不知道是否用相同的sha1將它連接到另一個,但是如果自動增量更好,那就這樣吧! – cgwebprojects
自動遞增ID與通過sha1哈希鏈接相比更適合RDBMS的設計。積分ID很小,非常快速地索引和遞增,對於DB來說非常便宜。 sha1會做出更大更慢的指標,正如juergen d指出的那樣,它們很容易發生碰撞。 (他的回答實際上應該是可以接受的答案,因爲它涵蓋了我所做的一切+碰撞) – Corbin
你能想象使用自動增量ID對數據庫進行分片嗎?其實不,你不知道;因爲Instragram已經通過了它:http://instagram-engineering.tumblr.com/post/10853187575/sharding-ids-at-instagram自動增量ID是可笑的縮放。 – mjsa
使用自動增量ID。
- 一個ID不必生成只增加。
- 散列更適合存儲密碼。
- 您可以使用SHA哈希得到重複的密鑰。這個機會很小但是真實。
- 一個ID更方便可讀
- ID是一種插入歷史記錄。你知道最後插入了哪條記錄(最高ID)
非常感謝你的朋友:) – cgwebprojects
你可能會很快達到可以存儲在一個整數的限制,比發現碰撞與SHA哈希。再次遇到陰影數據庫時,自動增量會變得很痛苦。 – mjsa
有幾個應用程序驅動的情況下,你想使用一個全球唯一的ID(UUID/GUID):採用分片策略
- 你希望(或者)擴展寫入。您不希望分片節點重複鍵。
- 你想成爲能夠安全端口數據從一個節點到另一個保存鍵。如果您想保持外鍵關係,這是至關重要的。
- 您的應用程序也可以用來離線(家用銷售,家用維修等),其中離線應用週期性地與「真理之源」同步。您希望這些離線密鑰是唯一的,無需進行遠程呼叫。否則,您需要制定策略來重新整理密鑰和關係。採用自動增量策略並根據您使用的RDBMS,這可能是一項不重要的任務。
如果你沒有從上面或類似的東西用例,您可以使用自動遞增的ID,如果讓你舒服;但是,您可能仍然要考慮UUID/GUID
權衡:
有很多持有約UUID/GUID鍵的速度/大小的意見。在一天結束時,這是一種折衷,有很多方法可以通過數據庫獲得或減少速度速度。理想情況下,您希望將索引存儲在RAM中以儘可能快;然而,這是一個權衡,你必須權衡其他考慮因素。
關於UUID/GUID其他注意事項:
- 許多RDBMS可以產生UUID。
- 您也可以通過您的application生成UUID(您並未綁定到要生成的RDBMS)。
- 開發人員/測試人員可以輕鬆地將數據從環境移植到環境,並使應用程序按預期工作。這是一個經常被忽視的用例;然而,這是使用UUID/GUID策略的更強有力的例子之一。
- 有些數據庫針對脫機使用進行了優化(CouchDB),其中UUID就是您所得到的。
- 1. 如何主鍵自動增量id在mysql的不同列中使用
- 2. 使用MySQL的正常主鍵自動遞增或複合鍵
- 3. Mysql自動增量ID或字母數字ID作爲外鍵
- 4. mysql主鍵自動增量問題
- 5. mysql無限主鍵自動增量
- 6. MySql加載數據忽略我的主鍵ID,並使用自動增量
- 7. Int自動增量主鍵和GUID列
- 8. JPA自動增量非主鍵列
- 9. 使用複合主鍵生成自動增量ID
- 10. 自動增量主鍵
- 11. 主鍵自動增量
- 12. Hibernate中用於自動增加MySQL主鍵的Java註釋 - @Id
- 13. 自動遞增列主鍵
- 14. 使用phinx遷移庫的非主鍵列的自動增量
- 15. 自動增量列的MySQL
- 16. 如何調用自動遞增的MySQL的主鍵Java變量
- 17. 重複鍵主鍵自動增量
- 18. 使我自己遞增的mysql id不自動增量
- 19. 自動增加主鍵(MySQL)的問題
- 20. SqlAdaptor.update對於使用自動增量主鍵列
- 21. 鍵列自動增量
- 22. Mysql的列值使用增量ID
- 23. 從mysql自動增量主鍵分配外鍵
- 24. Mysql:與主鍵自動增量重複鍵錯誤
- 25. 如何在MySql中不使用自動增量來增加主鍵
- 26. 哪個性能更好?主鍵與自動增量或複合鍵在MySQL中?
- 27. 從一個自動遞增的主鍵列出丟失的ID
- 28. MySQL:多個主鍵和自動遞增
- 29. mysql自動遞增主鍵耗盡
- 30. mysql使用自動增量ID選擇一定範圍ID
你應該選擇哪一個取決於你的應用。就性能而言,我會選擇不需要計算昂貴散列的選項。 – eggyal
我的2表涉及一個sha1散列被存儲,涉及每一行,我問作爲varchar(40)列在2個表我認爲是比1 varchar(40)和2個int列更detrement。 – cgwebprojects
@cgwebprojects 2 char(40)(不需要varchar)是80字節(取決於字符集)。 1個字符(40)和2個整數是48個字節。而且,索引在整數上比在char上要快(40)。 – Corbin