GUID是一種非常簡單有效的生成分布式唯一Id的方式,因此也有很多地方使用它來作為數據庫索引。然而,使用GUID作為數據庫的索引會帶來性能問題,一個是因為GUID較大,造成更大的查詢開銷,另外一個更主要的原因是GUID.NetGuid()函數生成的Guid是隨機的,容易造成聚集索引的索引碎片。
一個方法是生成有序的GUID來解決聚集索引的碎片問題,再EFCore中就引入了一個SequentialGuidValueGenerator類來生成有序的GUID,關於它的原理可以看下如下博文:
然而,微軟的這個庫是為Sqlserver來設計的,因為不同數據庫對於GUID的排序方式是不一樣的。不過已經有人設計出支持多數據庫的有序GUID生成算法(對於不同的數據庫,采用不同的配置參數),GUIDs as fast primary keys under multiple databases ,網上也有中譯版本:使用有序GUID:提升其在各數據庫中作為主鍵時的性能,感興趣的朋友可以看下。