9

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

 3 years ago
source link: https://www.cnblogs.com/TianFang/p/15072827.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK