数据库主键uuid转雪花id问题请教
我现在数据库主键用的是uuid 用的 varchar 听说uuid会导致页分裂 想换成雪花id 但是我看雪花id使用long存储的 我用varchar存雪花有什么影响吗? 性能跟空间占用是个问题,另外你用varchar存雪花怎么进行排序跟对比呢? 当然可以存储了,字符串存数字而已,排序的话也可以cast转成数字或者+0去排序;不过最好还是用int、bigInt类型,效率会高一点。还有如果你是使用MyISAM不是InnoDB,那最好别用字符型,因为MyISAM默认会对字符型采用压缩引擎,从而导致查询变得非常慢 用bigint类型吧,毕竟雪花ID是有序的,可以减少页分裂问题。,你用varchar会影响排序,甚至你在用ORDER BY子语句的时候会影响性能,虽然影响不大, 如果你使用 varchar 存储雪花 ID,会占用更多的存储空间(通常为 18-20 字节),这会增加存储成本和索引大小。建议:
使用 bigint 存储雪花 ID:这样可以充分利用雪花 ID 的优势,减少存储空间和索引大小。
迁移策略:在迁移过程中,可以创建一个新的 bigint 类型的主键列,并逐步将现有数据的 UUID 转换为雪花 ID。 用bigint存雪花id 相对好点,减少占用空间,排序 时也更快,索引也相对会小得多。
如果你要迁移,创建另一个表,把旧表数据导入到新表中,新表的newId 在插入旧数据时就处理或者 插入旧数据后再批量update 虽然前期使用的varchar字符类型确实不太合理,但是只要确定表中数据都是数字的,ALTER TABLE 表名 MODIFY 列名 BIGINT; 直接改,不就完事了嘛 brujah 发表于 2024-9-3 14:11
性能跟空间占用是个问题,另外你用varchar存雪花怎么进行排序跟对比呢?
怎么可能用主键排序比对 coolcalf 发表于 2024-9-4 09:06
怎么可能用主键排序比对
他想表达的或许是:雪花ID是趋势递增的,这个意思 long比varchar占用的空间少,检索自然也比较快,如果你的数据量不大的话,不建议用varchar,浪费空间
页:
[1]
2