使用GUID作为数据库主键的方案


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

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

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM