吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 894|回复: 10
收起左侧

[求助] 数据库主键uuid转雪花id问题请教

[复制链接]
ppgjx 发表于 2024-9-3 13:39
我现在数据库主键用的是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,浪费空间
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-15 18:30

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表