1. MySQL 中 UUID 与 BINARY(16) 存储的性能差异?
请说明 MySQL 中把 UUID 存为 CHAR(36) 与 BINARY(16) 的性能差异?
- 存储空间
- 索引大小
- 转换
UUID 若存为 CHAR(36) 字符串占 36 字节,存为 BINARY(16) 只占 16 字节,后者显著省空间、索引更小更快。把 UUID 字符串转 BINARY(16) 需去除连字符并转十六进制,可用 UNHEX(REPLACE(uuid,'-',''))。BINARY(16) 作为主键/索引键更高效。但需在应用层维护转换。空间与索引优势是 BINARY(16) 的关键。
BINARY(16) 比 CHAR(36) 省一半以上空间,索引与存储性能更优,是 UUID 存储的推荐方式。
INSERT INTO t (id) VALUES (UNHEX(REPLACE('550e8400-...', '-', '')));
SELECT HEX(id) FROM t;