GUID是一种非常简单有效的生成分布式唯一Id的方式,因此也有很多地方使用它来作为数据库索引。然而,使用GUID作为数据库的索引会带来性能问题,一个是因为GUID较大,造成更大的查询开销,另外一个更主要的原因是GUID.NetGuid()函数生成的Guid是随机的,容易造成聚集索引的索引碎片。

一个方法是生成有序的GUID来解决聚集索引的碎片问题,再EFCore中就引入了一个SequentialGuidValueGenerator类来生成有序的GUID,关于它的原理可以看下如下博文:

然而,微软的这个库是为Sqlserver来设计的,因为不同数据库对于GUID的排序方式是不一样的。不过已经有人设计出支持多数据库的有序GUID生成算法(对于不同的数据库,采用不同的配置参数),GUIDs as fast primary keys under multiple databases ,网上也有中译版本:使用有序GUID:提升其在各数据库中作为主键时的性能,感兴趣的朋友可以看下。

posted on 2021-07-28 22:01  天方  阅读(757)  评论(0编辑  收藏  举报