mysql 统计问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xinzhognyi
V2EX    Java

mysql 统计问题

  •  
  •   xinzhognyi 2018-08-21 11:53:03 +08:00 4063 次点击
    这是一个创建于 2619 天前的主题,其中的信息可能已经有所发展或是发生改变。

    正在做一些运营支撑,统计一些数据。
    这些统计如果用 sql 写的话,会很复杂,并且有可能会影响到 sql 的性能。
    现在有些统计就不直接用 sql 统计了,而是把数据统一查询出来,然后再使用代码来分析统计
    哪种方式会比较好?

    第 1 条附言    2018-08-22 10:48:02 +08:00
    举个栗子吧,比如我有 100 账户,要统计 100 个账户下各自的数据。每个账户需要 4 条不同的 sql。
    最简单的就是查询出 100 个账户,然后每次循环发送 4 条 sql。但是账户多了,就会导致 sql 太多而接口超时。
    现在我的解决办法是只发四条 sql group by 账户。然后代码中,把数据循环塞到每个账户下。
    还有,在这里只是来讨论下各自的思路,每个人思路不同,你有不同的思路可以说出来,大家可以讨论一下。就不要那么高深莫测了。
    16 条回复    2018-09-11 15:36:18 +08:00
    p2pCoder
        1
    p2pCoder  
       2018-08-21 11:56:06 +08:00
    这种需求 应该交给 数仓
    yidinghe
        2
    yidinghe  
       2018-08-21 13:42:01 +08:00
    看对统计效率是否有要求。如果要求很高,那么还是要花大量精力做针对性的设计调优。

    1、自己在代码里面分析,效率反而低,因为 SQL 的复杂度实际上就是业务的复杂度,后者代替前者得不偿失。
    2、用大数据框架统计也可以,但花费的时间可能要多上十倍几十倍。
    F281M6Dh8DXpD1g2
        3
    F281M6Dh8DXpD1g2  
       2018-08-21 13:48:16 +08:00
    你觉得你能比 mysql code 写的好你就自己写呗
    大概率不能,mysql 再烂,毕竟优化快二十年了
    zr8657
        4
    zr8657  
       2018-08-21 13:50:29 +08:00
    有种方法是把要查的多表数据存成一张表,然后直接查
    humansjl
        5
    humansjl  
       2018-08-21 15:46:25 +08:00
    这没有一定说哪个好哪个不好的,看 sql 影响到的性能 vs 额外建数据仓库 两者取舍了,或者一步一步来,每条 sql 先试着调优看看,毕竟调优有时候也挺花时间的
    awah
        6
    awah  
       2018-08-21 16:14:04 +08:00
    可以用存储过程试试. 在存储过程里面将任务分割, 最后汇总到一张表里面.
    Immortal
        7
    Immortal  
       2018-08-21 16:19:53 +08:00
    视图 或者 从库
    目前我是用的后者
    wqzjk393
        8
    wqzjk393  
       2018-08-21 16:22:08 +08:00
    你的意思是表内容太大,直接用聚合分析函数写复杂的查询逻辑会很慢,所以就直接 select*然后导出来,用别的方法处理?首先那么大的数据量不是应该用 hive 平台么?另外如果真的想导来处理,可以用 pandas,基本的 groupby 透视什么的都有
    wqzjk393
        9
    wqzjk393  
       2018-08-21 16:24:11 +08:00
    我很多时候都是用的视图,分开一层层的写逻辑。要不然一堆子查询和关联套来套去很容易晕而且后期不好修改时候不容易理解当时的逻辑。
    szq8014
        10
    szq8014  
       2018-08-21 16:28:19 +08:00
    觉得驴累了就把驴抗起来走么?
    he583899772
        11
    he583899772  
       2018-08-21 19:00:08 +08:00
    卧槽,平时我都是为了减少复杂用 sql 去避免复杂的业务逻辑代码。。。
    alcarl
        12
    alcarl  
       2018-08-21 20:32:03 +08:00 via Android
    不说具体泛泛而谈等于没说,SQL 这种东西就是为了统计数据而生的语言,能站巨人肩膀上谁还站地上。
    realpg
        13
    realpg  
    PRO
       2018-08-21 21:00:47 +08:00
    做个 slave 然后随便在 slave 上统计
    xmh51
        14
    xmh51  
       2018-08-21 21:13:01 +08:00   1
    做个从库啊 在从库查询
    hayman
        15
    hayman  
       2018-08-22 00:23:06 +08:00 via Android
    你也可以把数据库流入到 kafka,起一个 ksql server 进行实时的统计, 需要的时候直接从 topic 取结果。
    szq8014
        16
    szq8014  
       2018-09-11 15:36:18 +08:00
    挖个坟,这不是 SQL 的锅,是思路的事,看你的更新后思路应该是没问题了。其实新思路也可以用 SQL 完全写出来。

    关键字搜 行转列
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4590 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 01:05 PVG 09:05 LAX 18:05 JFK 21:05
    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