UUID 与 GUID 的关系
UUID(Universally Unique Identifier)是由开放软件基金会(OSF)定义的标准,而 GUID(Globally Unique Identifier)是微软对该标准的具体实现。虽然日常开发中经常混用,但底层规范有所不同。UUID 本质上由 32 个字节组成,通常显示为 36 个字符的字符串,中间用连字号分隔,例如:550e8400-e29b-41d4-a716-446655440000。
COMB 型设计思路
在数据库主键设计中,随机生成的 GUID 往往导致索引碎片化,影响检索性能。Jimmy Nilsson 曾提出一种改进方案,即 COMB(Combine)。
它的核心思想很直观:既然 UniqueIdentifier 毫无规律可言,那能不能保留前 10 个字节的随机性,用后 6 字节表示生成时间?这样既保留了唯一性,又增加了有序性。实际运行时,这种组合能显著提升索引效率,特别适合高并发写入场景。
主流语言实现
Java 与 Android
JDK 1.5 开始就内置了 java.util.UUID,Android 环境同样支持。生成 UUID 变得非常简单,直接调用静态方法即可。
import java.util.UUID;
public class Main {
public static void main(String[] args) {
// 生成一个随机 UUID
UUID uuid = UUID.randomUUID();
String id = uuid.toString();
System.out.println(id);
}
}
这段代码常用于生成数据库的主键 ID。在 Android 开发中,配合 ContentValues 插入数据也很方便:
ContentValues initialValues = new ContentValues();
initialValues.put("rowid", UUID.randomUUID().toString());
db.insert(DATABASE_TABLE_LOCATIONS, null, initialValues);
查询时记得注意参数拼接,避免 SQL 注入风险。
数据库处理
MySQL 原生提供了 SELECT UUID() 函数来生成标识符。存储类型上,一般建议使用 CHAR(36) 或 BINARY(36),具体取决于对空间占用和排序性能的权衡。
PHP 及其他
PHP 环境下也有对应的函数可以生成 v4 UUID,具体实现视扩展版本而定。不同语言的 API 虽异,但遵循的核心逻辑是一致的。
总结
理解 UUID 与 GUID 的异同有助于在不同技术栈间迁移数据。对于追求极致性能的场景,除了标准 UUID,也可以考虑 COMB 等优化方案来改善数据库索引表现。

