表中使用UUID当主键的时候,例如:
uuid VARCHAR(36) DEFAULT (UUID()) PRIMARY KEY,
新纪录的插入,并不是插入到表格的末尾,而是插入到中间。当表很大的时候,会造成性能问题。
UUID_TO_BIN(string_uuid, swap_flag)函数
string_uuid
必需的。 一个二进制的 UUID。
swap_flag
可选的。 交换标识,可用只为 0 和 1。默认值是 0。
第一段和 第三段的交换。如下
原数值:
B45F7406 CF63 11EC AEAB0242AC110003
swap_flag 设置为1 后:SELECT HEX(UUID_TO_BIN(@string_uuid, 1));
11EC CF63 B45F7406 AEAB0242AC110003
设置为1后,数值一直正向增加。
建表语句更改为:
uuid BINARY(16) DEFAULT (UUID_TO_BIN(UUID(), 1)) PRIMARY KEY,
附件 UUID 版本:
UUID v1:是一个通用的唯一标识符,使用时间戳和生成它的计算机的MAC地址生成。
UUID v4:是一个使用随机数生成的通用唯一标识符。
使用UUID v4,无法生成任何顺序输出,因此不推荐使用UUID v4做为InnoDB表的主键。
修复建议:
使用UUID v1。
字段定义为:BINARY(16)来存储UUID。
使用函数UUID_TO_BIN(..., swap_flag)对UUID进行转换,这里将swap_flag设置为“1”。