Avoid UUID Version 4 Primary Keys
6 months ago
- #database-performance
- #postgresql
- #uuid-vs-integer
- UUID第4版(随机)主键由于随机性导致索引使用效率低下,从而造成数据库性能不佳。
- UUID占用空间(16字节)比整型(4-8字节)更大,影响存储和IO性能。
- 随机UUID会导致索引页分裂和碎片化,增加插入延迟和写入IO开销。
- UUID v4不具备安全性,不应作为安全能力使用。
- 时间序UUID(第7版)通过加入时间戳改善索引性能,缓解了部分问题。
- 替代UUID的方案包括:从整型生成混淆代码,或使用序列/大整型作为主键。
- 缓解UUID性能问题的方法包括:重建索引、增加内存(shared_buffers, work_mem)、按可排序字段聚簇。
- 建议:除非必须使用UUID,否则优先选择整型或大整型主键;如需UUID则推荐v7版本。