V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dbpe
V2EX  ›  程序员

请教大家一个数据库涉及问题...

  •  
  •   dbpe · 2018-04-18 08:32:11 +08:00 · 4458 次点击
    这是一个创建于 2171 天前的主题,其中的信息可能已经有所发展或是发生改变。
    众所周知..数据库设计有三大范式.

    我看书之后发现...

    数据量大了..表多了..join 查询效率的就低了..开始设计添加冗余字段...

    那么有木有大佬告诉下咱...大概多少量级就可以考虑了?

    百万级?千万级?
    24 条回复    2018-04-23 13:52:02 +08:00
    yulitian888
        1
    yulitian888  
       2018-04-18 08:35:35 +08:00
    遇到性能慢了感觉到必须优化了再考虑
    百万千万级的,如果是有索引的查询,根本不慢
    johnny23
        2
    johnny23  
       2018-04-18 08:41:41 +08:00 via iPhone
    坐等大佬分析
    tomczhen
        3
    tomczhen  
       2018-04-18 08:44:03 +08:00 via Android
    OLAP 和 OLTP 要求不一样,反范式是必要的“妥协”。
    lol173
        4
    lol173  
       2018-04-18 08:44:16 +08:00
    数据进入某一个状态后应该使用冗余了保存的,例如已经下单的商品、商品的价格等等,索引要用上,数据大了水平分表也应该用上,统计数据做阶段性统计数据表,略略略就这么多了
    shakoon
        5
    shakoon  
       2018-04-18 09:04:08 +08:00
    量级和服务器性能有关,破机器百万级就很慢了,好机器上亿条也能秒级处理。另外我觉得首先是考虑表分区啊,建什么冗余字段
    projectzoo
        6
    projectzoo  
       2018-04-18 09:09:10 +08:00
    百万千万现在一般机器都很好吧
    自己实测一下不就好咯?
    x7395759
        7
    x7395759  
       2018-04-18 09:38:10 +08:00
    冗余字段的设计是有道理的,或许有时候水平分库就是错误的区分
    whypool
        8
    whypool  
       2018-04-18 09:46:19 +08:00
    同问
    不用冗余字段,查询需要 join 多个表,有些数据生成了修改的可能性很小,如果弄到一个表去,一个 select 就出数据了

    所以,是严格按照范式设计表么?
    Hozzz
        9
    Hozzz  
       2018-04-18 10:42:39 +08:00
    看预期值了,你要是一条 sql 进去,10 秒出来能接受,那就没必要考虑这些;要是 1 秒都不能接受,那就可以考虑怎么优化了。
    dbpe
        10
    dbpe  
    OP
       2018-04-18 13:52:44 +08:00
    @lol173 那我大概明白,那些结构的表需要冗余字段,而那些不需要了...

    PS:emmm..感觉性能制胜论很多啊...压榨机器的性能不应该是程序员的浪漫么?
    dbpe
        11
    dbpe  
    OP
       2018-04-18 13:53:26 +08:00
    上面表述不清楚,应该是机器性能制胜论
    Cbdy
        12
    Cbdy  
       2018-04-18 14:20:11 +08:00 via Android
    范式只是一种设计模式,有优点也有缺点,反范式也有优点和缺点,设计的时候要权衡一下
    hcymk2
        13
    hcymk2  
       2018-04-18 14:32:42 +08:00
    冗余字段其实有另外的一个问题, 你得保证你的冗余字段值的正确。
    weizhen199
        14
    weizhen199  
       2018-04-18 14:33:02 +08:00
    冗余和索引有点类似的。
    牺牲删改时间换查询时间
    这东西说实话挺经验的,和模电一样毛估估
    csl1995
        15
    csl1995  
       2018-04-18 16:42:25 +08:00
    索引优化、缓存技术、搜索引擎、优化 sql、硬件之后依然有性能瓶颈时再进行
    akira
        16
    akira  
       2018-04-18 16:48:57 +08:00
    上班第一天,先把范式设计忘掉
    dbpe
        17
    dbpe  
    OP
       2018-04-18 16:58:52 +08:00
    @akira 哈哈..这倒是..一张表..三个字段是相通的...分别指向不同的表(貌似还没有外键约束..全靠人肉约束)
    dbpe
        18
    dbpe  
    OP
       2018-04-18 16:59:18 +08:00
    @hcymk2 emmm 不能用外键进行约束么?
    dbpe
        19
    dbpe  
    OP
       2018-04-18 17:01:18 +08:00
    @weizhen199 还有一点..用空间换时间...
    Miy4mori
        20
    Miy4mori  
       2018-04-18 18:22:25 +08:00
    维护冗余字段的代价有点
    Dawnki
        21
    Dawnki  
       2018-04-19 00:58:53 +08:00 via iPhone
    看看《高性能 Mysql 》吧,有时追求性能确实要牺牲一些约束和范式的
    Dawnki
        22
    Dawnki  
       2018-04-19 01:01:15 +08:00 via iPhone
    不过优化这东西是一步一步来的,遇到慢查询时才需要另辟蹊径,一开始不要过于看重优化.
    dbpe
        23
    dbpe  
    OP
       2018-04-23 13:50:59 +08:00 via Android
    @Miy4mori 有点啥?大?
    dbpe
        24
    dbpe  
    OP
       2018-04-23 13:52:02 +08:00 via Android
    @Dawnki 只是想一步到位。。如果业务数据达不到那个量级就不考虑了。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   943 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:32 · PVG 05:32 · LAX 14:32 · JFK 17:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.