ppgjx 发表于 2024-9-3 13:39

数据库主键uuid转雪花id问题请教

我现在数据库主键用的是uuid 用的 varchar 听说uuid会导致页分裂 想换成雪花id 但是我看雪花id使用long存储的 我用varchar存雪花有什么影响吗?

brujah 发表于 2024-9-3 14:11

性能跟空间占用是个问题,另外你用varchar存雪花怎么进行排序跟对比呢?

melo520 发表于 2024-9-3 14:19

当然可以存储了,字符串存数字而已,排序的话也可以cast转成数字或者+0去排序;不过最好还是用int、bigInt类型,效率会高一点。还有如果你是使用MyISAM不是InnoDB,那最好别用字符型,因为MyISAM默认会对字符型采用压缩引擎,从而导致查询变得非常慢

yuaotian 发表于 2024-9-3 14:24

用bigint类型吧,毕竟雪花ID是有序的,可以减少页分裂问题。,你用varchar会影响排序,甚至你在用ORDER BY子语句的时候会影响性能,虽然影响不大,

wuaipojie_lbw 发表于 2024-9-3 14:56

如果你使用 varchar 存储雪花 ID,会占用更多的存储空间(通常为 18-20 字节),这会增加存储成本和索引大小。
建议:
使用 bigint 存储雪花 ID:这样可以充分利用雪花 ID 的优势,减少存储空间和索引大小。
迁移策略:在迁移过程中,可以创建一个新的 bigint 类型的主键列,并逐步将现有数据的 UUID 转换为雪花 ID。

披星代月 发表于 2024-9-3 16:29

用bigint存雪花id 相对好点,减少占用空间,排序 时也更快,索引也相对会小得多。
如果你要迁移,创建另一个表,把旧表数据导入到新表中,新表的newId 在插入旧数据时就处理或者 插入旧数据后再批量update

Eaglecad 发表于 2024-9-4 06:38

虽然前期使用的varchar字符类型确实不太合理,但是只要确定表中数据都是数字的,ALTER TABLE 表名 MODIFY 列名 BIGINT; 直接改,不就完事了嘛

coolcalf 发表于 2024-9-4 09:06

brujah 发表于 2024-9-3 14:11
性能跟空间占用是个问题,另外你用varchar存雪花怎么进行排序跟对比呢?

怎么可能用主键排序比对

玄玉 发表于 2024-9-4 09:29

coolcalf 发表于 2024-9-4 09:06
怎么可能用主键排序比对

他想表达的或许是:雪花ID是趋势递增的,这个意思

workzj 发表于 2024-9-4 10:22

long比varchar占用的空间少,检索自然也比较快,如果你的数据量不大的话,不建议用varchar,浪费空间
页: [1] 2
查看完整版本: 数据库主键uuid转雪花id问题请教