mysql,如果数据会删除老数据,只保留最新数据,主键用 uuid 是否也 ok? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
win7pro
V2EX    MySQL

mysql,如果数据会删除老数据,只保留最新数据,主键用 uuid 是否也 ok?

  •  
  •   win7pro 2024-08-20 17:22:34 +08:00 2766 次点击
    这是一个创建于 496 天前的主题,其中的信息可能已经有所发展或是发生改变。

    关于 mysql 主键,都说不建议用 uuid ,主要原因是耗费 16k 主键空间,怕容易撑爆。 但如果这个表只用于记录最新数据,定期删除老数据,比如:

    1 、记录用户登录 session ,已经过期的 session 会定期删掉; 2 、记录自然日内的用户操作次数,比如用户发送短信验证码的次数,当天首次发验证码就产生一行数据用于记录当天发已经发送几次验证码,超额就拒绝发送,但到晚上 12 点就会清空这个表。

    这两种情况下,是用 uuid 作为主键是否没啥问题?还是说还有我没想到的地方?

    谢谢!

    16 条回复    2024-08-21 16:26:06 +08:00
    TiggeYL
        1
    TiggeYL  
       2024-08-20 17:28:32 +08:00   1
    你这个不如用缓存,还能设置过期时间
    sketcherly
        2
    sketcherly  
       2024-08-20 17:39:45 +08:00 via Android   1
    主键不建议用 uuid 主要是插入页分裂的问题,据说插入性能急剧下降我(没有自己测过不过应该是真的),你个人的过这种情况会考虑加一个自增主键啥也不干,然后 uuid 加唯一索引
    当然,这种场景可以引入其他组件的话还是首选 redis
    sketcherly
        3
    sketcherly  
       2024-08-20 17:41:59 +08:00 via Android
    @sketcherly 错别字修正 我个人的话这种情况会考虑加一个自增主键啥也不干,然后 uuid 加唯一索引用来改查
    Plutooo
        4
    Plutooo  
       2024-08-20 18:01:25 +08:00
    首先删除表不一定会释放空间
    其次你需要考虑使用 uuid 出现页分裂和 B+树空洞的问题
    可以看看 mysql45 讲第 13 讲《为什么表据删掉一半,表文件大小不变?》
    aragakiyuii
        5
    aragakiyuii  
       2024-08-20 18:03:33 +08:00 via Android
    uuid v7
    win7pro
        6
    win7pro  
    OP
       2024-08-20 18:14:39 +08:00
    非常感谢!
    june4
        7
    june4  
       2024-08-20 19:28:04 +08:00
    正常情况下,不断新增数据和删除旧日期的数据,完全不用担心表会越来越大,删掉的空间会被复用的
    sardina
        8
    sardina  
       2024-08-20 19:49:44 +08:00   2
    uuid v7: yes
    julyclyde
        9
    julyclyde  
       2024-08-20 21:41:52 +08:00
    你这几个其实都不该用 mysql……
    Rocketer
        10
    Rocketer  
       2024-08-20 22:13:49 +08:00 via iPhone
    你要是纠结 key 的问题还不如用 mongodb ,那个 key 算是完美的
    huigeer
        11
    huigeer  
       2024-08-20 22:17:15 +08:00
    更重要的原因是页分裂造成的 io
    dddd1919
        13
    dddd1919  
       2024-08-20 22:53:21 +08:00
    bigint 呗,也才 8k ,至少省一半空间,效率也好点。18446744073709551615 ,能把这撑爆?
    dododada
        14
    dododada  
       2024-08-21 09:21:31 +08:00
    1 楼的缓存吧,redis 就行
    laminux29
        15
    laminux29  
       2024-08-21 09:36:14 +08:00
    内部业务主键,最好是用自增的 64 位 int ,也就是 BIGINT:
    https://dev.mysql.com/doc/refman/8.4/en/integer-types.html

    有些场景需要把主键传到前端,产品经理不希望别人通过调试来看出主键值,于是还需要加个 hash 。而 UUID 可以在这里一步到位,这也是为啥很多公司喜欢 UUID 的根源所在。
    Cruzz
        16
    Cruzz  
       2024-08-21 16:26:06 +08:00
    uuid 的主要问题是大小无序叶分裂,但是其实问题不大,我们这现在有 70 多 w 数据 uuid 的表。没发现有啥异常。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3749 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 10:23 PVG 18:23 LAX 02:23 JFK 05:23
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86