mysql 是三张表连接查询还是分开 2+1 然后在处理合并数据? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
mushishi
V2EX    程序员

mysql 是三张表连接查询还是分开 2+1 然后在处理合并数据?

  •  
  •   mushishi 2019-06-06 17:09:21 +08:00 4101 次点击
    这是一个创建于 2328 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不知道给位是怎么处理的?能否给一些建议?主表是 45W 左右的数据,从表大概 8W 左右。

    20 条回复    2019-06-12 15:32:17 +08:00
    moodasmood
        1
    moodasmood  
       2019-06-06 17:43:17 +08:00
    这么点数据,瞎 jb 操作都合理
    moodasmood
        2
    moodasmood  
       2019-06-06 17:44:30 +08:00
    最好业务层处理,查询 3 次,数据库层面不做任何拼表
    securityCoding
        3
    securityCoding  
       2019-06-06 17:51:18 +08:00
    做好索引 , 数据量不大的话单表 /连表都行的.

    推荐 2 楼的做法
    des
        4
    des  
       2019-06-06 17:52:09 +08:00 via Android
    看情况吧,分开了好缓存
    Tianao
        5
    Tianao  
       2019-06-06 20:49:31 +08:00 via iPhone
    #2 +1,不要在数据库层面搞骚操作,交给业务逻辑去做。
    akira
        6
    akira  
       2019-06-06 20:52:42 +08:00
    a 连 b 连 c 的话 ,真不建议,一堆人搞不定的,
    还不如按 2l 拆开来写
    DreamSpace
        7
    DreamSpace  
       2019-06-06 21:02:10 +08:00 via Android
    @moodasmood #2 为什么要查 3 次呢?查 3 感觉会比一次拉出来慢很多,还要消耗额外的连接数,组装数据时还会有内存和性能上的开销。
    Leammin
        8
    Leammin  
       2019-06-06 21:23:47 +08:00 via Android
    @DreamSpace 一次查询的话其实就是把应用层的性能开销转移到了数据库层,但数据库层的资源非常宝贵,所以一般都在应用层处理。
    Lighfer
        9
    Lighfer  
       2019-06-06 21:36:30 +08:00
    @DreamSpace 数据库的可扩展性比上层应用差得多,因此资源也就要珍贵得多,上层应用开销大点问题不大,内存不够了,cpu 不够了,加机器就是了,相比较而言数据库就没那么简单了
    leon0903
        10
    leon0903  
       2019-06-06 21:44:58 +08:00
    其实我也有一个疑问 都说在业务层自己拆开按照单表去查,但是这样的话如果有分页呢?还有就是假如第一次从 A 表中查出来有 100w 条数据,然后要把这 100w 条数据当作条件放到 B 表中去查询,这样的话生成的 sql(如 where id in(.........................................) )难道不会超出 mysql 限制吗(我知道 mysql 这个参数可以调整,但是这终究是一次很大的网络消耗,而且容易失败)?
    7654
        11
    7654  
       2019-06-06 21:53:09 +08:00
    @akira #6 真的有这么惨的吗。。。。
    内部有个 sql plus 执行的简单报表,定时执行,经常手撸 SQL,连接时间设置的越来越长,已经 600 秒了
    razertory
        12
    razertory  
       2019-06-06 22:12:17 +08:00
    三表 join,索引做好了没有问题的
    sonyxperia
        13
    sonyxperia  
       2019-06-06 22:49:47 +08:00
    是不是问问你们的 DBA 啊
    F281M6Dh8DXpD1g2
        14
    F281M6Dh8DXpD1g2  
       2019-06-06 23:00:52 +08:00
    很少有人自己手写能比数据库跑的快的
    mysql 除外,他的 join 本身就很烂
    jiezhi
        15
    jiezhi  
       2019-06-06 23:07:34 +08:00 via iPhone
    联表查过二十多张表……

    四百多行的 SQL 语句,不过我是搞数据的
    version
        16
    version  
       2019-06-06 23:13:53 +08:00
    如果是 api 接口的一般拆 3 个 sql 再 redis 缓存
    如果是数据统计.看业务吧.有些过滤可以是 redis 存 id 或者其它方式来过滤.再 sql.都可以.
    具体看业务了.没有绝对的方法..为了性能还是为了好修改好写代码
    msg7086
        17
    msg7086  
       2019-06-06 23:18:03 +08:00
    @DreamSpace 想一想数据库的扩展性和应用程序服务器的扩展性。
    数据库做一个集群代价很高,但是应用程序服务器你随便搞个几千台都不是问题。

    @leon0903 你什么查询需要在 B 里查 100 万条记录?
    如果真的有那么大的数据量过滤,放到 MySQL 内部做也不会更快。
    akira
        18
    akira  
       2019-06-07 15:10:42 +08:00
    @7654 报表性质不一样,24 小时能跑出来就行
    armysky
        19
    armysky  
       2019-06-07 21:20:10 +08:00 via Android
    如果表之间的关联是能命中索引,当然是写表关联了
    mushishi
        20
    mushishi  
    OP
       2019-06-12 15:32:17 +08:00
    还是觉得两张表 join,再处理数据好一点。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1130 人在线   最高记录 6679     nbsp; Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 23:03 PVG 07:03 LAX 16:03 JFK 19:03
    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