有序GUID

目前主流的数据库都有聚集索引的概念,当我们将主键字段使用GUID类型时,

  • 无序GUID的字段值 会影响数据行的插入性能
  • 有序GUID的字段值 将会有接近int的插入性能

因此建议当使用GUID类型的主键时,使用【有序GUID的字段值】



ClownFish对以下数据库及类型提供了有序GUID的支持(已测试):

  • SQLSERVER: UniqueIdentifier 字段类型
  • PostgreSQL: uuid 字段类型
  • MySQL: char(36) 字段类型
  • 达梦: char(36) 字段类型

获取有序GUID的值

Guid guid = dbContext.NewSeqGuid();

使用示例

private static readonly string s_insertSQL = "insert into TestGuid(RowGuid, IntValue) values(@RowGuid, @IntValue)";

private void ExecuteTest(DbContext db)
{
    for( int i = 0; i < 1000; i++ ) {

        var args = new {
            RowGuid = db.NewSeqGuid(),
            IntValue = i + 1
        };

        db.CPQuery.Create(s_insertSQL, args).ExecuteNonQuery();
    }
}

说明:

  • NewSeqGuid方法会根据 数据库类别 生成有效的【有序GUID的字段值】