如果主鍵總是排序,我如何以隨機順序將Guid存儲爲主鍵。一級鍵是按排序順序存儲,還是按SQL語句排序?
回答
好,不一定存儲在磁盤上的排序順序主鍵。但聚集索引是。在絕大多數情況下,主鍵是聚集索引。雖然這不一定能保證結果的排序,但結果通常是按照默認聚簇索引排序的。
我怎麼能以隨機順序存儲的GUID作爲主鍵
的GUID不作出正是這種原因,良好的聚集索引。 SQL Server確實有一些東西叫做Sequential GUID來解決這個問題。生成的GUID不會連續,但它們將是連續的。它有一些注意事項,但:
創建一個GUID比以前這個功能指定的計算機上生成自Windows啓動任何GUID更大。
如果系統重新啓動,序列丟失。如果多個系統創建密鑰,則序列會丟失。另外,還有一個問題是,我們仍然依靠SQL Server來生成密鑰,這是使用GUID的一個重要原因。
一般來說,我不會使用GUID作爲一個聚集索引建議。作爲替代方案,可以使用普通的IDENTITY
鍵作爲聚集索引並創建單獨的GUID列(可能具有其自己的索引,甚至是唯一的約束,以確保應用程序不會嘗試重新插入現有記錄)。這個單獨的列成爲一種更具商業邏輯意義的「全局標識符」,而不是數據持久性實現意義上的那種。
用於覆蓋連續指導的+1 – JiggsJedi 2014-10-03 19:19:52
聚集索引並不意味着數據必然按照光盤上的順序排列。 [我的答案在這裏更詳細](http://stackoverflow.com/a/24470091/73226) – 2014-10-03 19:31:53
@MartinSmith:我誤解了文檔? http://msdn.microsoft.com/en-us/library/ms190457.aspx'「聚簇索引根據數據的鍵值對錶或視圖中的數據行進行排序和存儲,這些列包含在索引定義中。每個表只能有一個聚簇索引,因爲數據行本身可以按照一個順序排序。「' – David 2014-10-03 19:33:49
否,該表數據並不總是存儲在主鍵的順序,但通常的主鍵有聚簇索引,以及該數據總是存儲在聚簇索引的順序。
如果您不想存儲在主鍵的順序中的數據,你應該使用它一個非聚集索引。
請注意,儘管您通常按照存儲順序獲取數據,但除非您使用order by
子句,否則不保證該順序。如果訂單非常重要,您應該始終指定它應該是什麼。
好吧。非聚集索引有什麼缺點嗎? 謝謝你的回答。 – 2014-10-05 09:37:42
@AKshayRaut:只有在索引中彼此相鄰的記錄不會在表中彼此相鄰存儲,因此提取一系列記錄可能會稍微慢一點。但是,爲guid建立聚簇索引會導致嚴重的碎片化,這會降低所有查詢的性能,而不僅僅是一些特殊情況。 – Guffa 2014-10-05 12:18:41
好的。再次感謝。 – 2014-10-07 11:50:22
無主鍵並不總是按排序順序存儲。
聚集索引總是以排序順序存儲,這與流行的誤解相反。
如果您選擇隨機GUID作爲集羣主鍵,那麼您很可能很快就會得到高度分散的聚簇索引,其中物理和邏輯順序在頁面變滿並且需要拆分時發生很大的分歧。
通常,大多數聚簇索引掃描通過遵循頁面指針而不是分配(頁碼)順序以邏輯(索引鍵)順序發生。爲了分配有序掃描,必須在讀取未提交的隔離級別時運行,或者必須保持表鎖。
然而,沒有訂單就沒有保證結果順序。
謝謝你的回答。 – 2014-10-05 09:41:25
- 1. 按語句排序的SQL順序
- 2. foreach語句是按順序迭代還是隨機順序?
- 3. STL按排序順序存儲數字
- 4. 按順序排列並按組排序
- 5. 在select語句中按順序排序SQL服務器
- 6. SQL按字母順序排序按名稱排序
- 7. MYSQL按日期時間順序排序而不是按時間順序排列
- 8. NSMutableDictonary是否總是按字母順序排序鍵?
- 9. 存儲數據,按排列順序排序mysql
- 10. 按字母順序排序,然後按字母順序排列
- 11. 我按字母順序排序而不是數字排序
- 12. 按鍵排序
- 13. 按優先級隊列上的排序順序排序
- 14. SQL和PHP按順序排序
- 15. SQL按字母順序排序
- 16. SQL - 按字母順序排序的列
- 17. 按兩個順序排序SQL結果
- 18. 按加入順序排序,按組排序,有,按
- 19. 按順序排列
- 20. 按字母順序排序
- 21. 按字母順序排序
- 22. 按字母順序排序
- 23. 按字母順序排序
- 24. 排序按字母順序
- 25. 按字母順序排序
- 26. 按選擇順序排序
- 27. 按字母順序排序
- 28. 順序按升序排列
- 29. 不按順序排序
- 30. 按一定順序按多個鍵對數組排序
下面是一篇很好的文章,討論這個:http://blog.sqlauthority.com/2013/02/10/sql-server-primary-key-and-nonclustered-index-in-simple-words/ – DanK 2014-10-03 19:17:36