V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zealinux
V2EX  ›  数据库

大家的数据库主键 ID 是用什么?

  •  
  •   zealinux · 2020-04-23 10:43:35 +08:00 · 5238 次点击
    这是一个创建于 1679 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1. 自增长的 Long 或 Int
    2. UUID
    3. 自己代码生成插入 String

    或者其他更好的方案


    我喜欢用 UUID,这样每次合并数据时没那么痛苦。

    39 条回复    2020-04-24 11:36:14 +08:00
    CCIP
        1
    CCIP  
       2020-04-23 10:46:11 +08:00 via Android
    雪花算法
    FanError
        2
    FanError  
       2020-04-23 10:46:50 +08:00
    用 UUID,不过一直看别人说性能不好。
    我寻思着接触的项目应该数据量或对性能的要求还没达到要在这个 UUID 上榨性能的地步,就没管了。
    asAnotherJack
        3
    asAnotherJack  
       2020-04-23 10:46:54 +08:00
    自增,索引的原理 用自增的好
    tabris17
        4
    tabris17  
       2020-04-23 10:47:35 +08:00
    那还不如 snowflake
    Cmdhelp
        5
    Cmdhelp  
       2020-04-23 11:08:33 +08:00
    这个还是看应用环境吧,
    ytmsdy
        6
    ytmsdy  
       2020-04-23 11:08:51 +08:00
    自增,毕竟时不时查数据,看 ID 的时候,长长的 UUID 看多了眼镜会瞎。
    MeteorCat
        7
    MeteorCat  
       2020-04-23 11:14:41 +08:00 via Android
    自增 ID,很多项目都达不到研究选用什么主键 ID 的地步,按照最简原则选择最容易的
    littleylv
        8
    littleylv  
       2020-04-23 11:24:34 +08:00
    量大再考虑性能。
    量少,喜欢用什么就用什么
    arthas2234
        9
    arthas2234  
       2020-04-23 11:26:22 +08:00
    这个要看表的作用啊,难道订单、用户、客户数据也用自增?
    ajaxfunction
        10
    ajaxfunction  
       2020-04-23 11:28:13 +08:00
    一直是自增,目前最悠久的一个项目自增到 90 万
    Veneris
        11
    Veneris  
       2020-04-23 11:33:04 +08:00
    雪花算法,自增,不连续,全局无重复。
    但是太长,有没有满足以上三条但短一些的。
    gjquoiai
        12
    gjquoiai  
       2020-04-23 12:08:20 +08:00
    littlewing
        13
    littlewing  
       2020-04-23 12:57:15 +08:00
    @arthas2234 是的,都用自增,然后订单、用户、客户 id 加索引
    akira
        14
    akira  
       2020-04-23 13:58:48 +08:00   ❤️ 1
    表主键 ID 用自增,原则上不参与任何业务逻辑,放着好看的。
    业务 主键 用 uuid
    gz911122
        15
    gz911122  
       2020-04-23 14:17:59 +08:00
    @arthas2234 是的 都用自增,恭喜你猜对了
    xsm1890
        16
    xsm1890  
       2020-04-23 14:19:41 +08:00
    innodb 自增
    jzmws
        17
    jzmws  
       2020-04-23 14:22:40 +08:00
    无脑推荐雪花算法 太香了
    newtype0092
        18
    newtype0092  
       2020-04-23 14:22:41 +08:00
    @arthas2234 用啊
    Hanggi
        19
    Hanggi  
       2020-04-23 14:24:42 +08:00
    自增加 hash
    newtype0092
        20
    newtype0092  
       2020-04-23 14:27:37 +08:00
    @arthas2234 哈哈你看这么多用的,小数据量的自增最高效,大数据量或着跨库的时候用自己定义的 id 就行,自增 id 也是要保留的。
    wellsc
        21
    wellsc  
       2020-04-23 14:27:42 +08:00
    @Veneris 美团的 leaf 了解一下
    gemini767
        22
    gemini767  
       2020-04-23 14:29:57 +08:00
    自增 id uuid 是全局唯一 id 俩不一回事,不冲突
    keshawnvan
        23
    keshawnvan  
       2020-04-23 14:44:00 +08:00
    cigarzh
        24
    cigarzh  
       2020-04-23 15:29:44 +08:00
    snowflake
    Eirxxx69
        25
    Eirxxx69  
       2020-04-23 15:45:34 +08:00
    不考虑性能和数据量,用啥都行
    Kenyore
        26
    Kenyore  
       2020-04-23 15:54:04 +08:00
    UUID 多舒服。
    xuanbg
        27
    xuanbg  
       2020-04-23 16:07:40 +08:00
    @FanError 对的,确实性能不好,但我们的业务每天新增的数据都是以百千计而非百万千万计……所以我就不管他性能好不好了,只要用的方便就好。真香
    creatdate
        28
    creatdate  
       2020-04-23 16:26:11 +08:00
    UUID,因为同时插多张表,UUID 一致正好可以关联,单表就随便,自增比较方便。
    sunmoon1983
        29
    sunmoon1983  
       2020-04-23 19:19:08 +08:00
    @jzmws 雪花是很香,但是需要把数据交给 js 的时候就不香了,还需要转成字符串
    ck65
        30
    ck65  
       2020-04-23 20:00:51 +08:00
    自增和雪花并存。还蛮香的。
    beginor
        31
    beginor  
       2020-04-23 20:32:47 +08:00 via Android
    雪花 ID
    guoziyan
        32
    guoziyan  
       2020-04-23 20:55:18 +08:00
    说用 UUID 的,都没想过大的主键导致索引树高度的膨胀而导致查询性能的下降,同时 UUID 的随机写导致索引节点的不断分裂合并所带来的影响吗?
    通常来说,在数据行 1k 大小的时候,一个三层的索引,主键使用 bigint,可以存储大约 2200w 的数据,如果是 int 的话,则能存储 4000w 左右的数据, 而 uuid 只能存 250w 左右的数据。
    PopRain
        33
    PopRain  
       2020-04-23 21:29:58 +08:00
    @guoziyan 1.uuid 有升序方案 2.看应用场景,大部分应用的索引不会很在意你说的性能区别,只是心理上的差别
    huobazi
        34
    huobazi  
       2020-04-23 21:35:36 +08:00
    snowflack
    MarsBar
        35
    MarsBar  
       2020-04-24 07:17:44 +08:00
    uuid v5 hash 某些字段 然后拿来当主键。。
    guoziyan
        36
    guoziyan  
       2020-04-24 08:32:46 +08:00
    @PopRain 如果对性能没有吹毛求疵要求的话,也不是不能接收。
    sprit
        37
    sprit  
       2020-04-24 09:39:32 +08:00
    主键自增 业务 ID snowfalck
    MOONLIGHTT
        38
    MOONLIGHTT  
       2020-04-24 10:58:57 +08:00
    分布式用雪花,单机用自增 id
    yeqizhang
        39
    yeqizhang  
       2020-04-24 11:36:14 +08:00 via Android
    @creatdate 一对一主键关联我见过用 int 的……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5418 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 05:49 · PVG 13:49 · LAX 21:49 · JFK 00:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.