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
blueorange
V2EX  ›  MySQL

mysql 统计优化技巧

  •  
  •   blueorange · 2019-04-11 17:31:06 +08:00 · 4988 次点击
    这是一个创建于 1813 天前的主题,其中的信息可能已经有所发展或是发生改变。
    mysql 数据量已经达到千万级别, 目前有订单表, 查询用 sum 函数统计非常慢(大概要几分钟),有没有特别的方法来做统计 或者说优化一波
    8 条回复    2019-04-18 16:50:17 +08:00
    gaius
        1
    gaius  
       2019-04-11 17:33:13 +08:00   ❤️ 1
    olap?
    nilai
        2
    nilai  
       2019-04-11 17:35:12 +08:00   ❤️ 1
    分表 再加支持分布式中间件的,比如 Mycat
    blueorange
        3
    blueorange  
    OP
       2019-04-11 17:40:58 +08:00
    @nilai 有在生产中使用过吗? 性能怎么样, 我先去了解了解,谢了老哥。
    dapang1221
        4
    dapang1221  
       2019-04-11 17:41:50 +08:00   ❤️ 1
    splunk,请
    ladypxy
        5
    ladypxy  
       2019-04-11 17:44:40 +08:00 via iPhone   ❤️ 1
    CRVV
        6
    CRVV  
       2019-04-11 21:40:46 +08:00
    你的需求不够清楚

    你要算哪些数据的 sum? 是全表的 sum 还是用 WHERE 筛选过的一部分的 sum?
    如果是筛选过的,筛选过后有多少条数据?

    如果筛选过后的数据量小,那么问题在于你的查询没有利用好索引。
    你的查询有可能本身不可能被 MySQL 的索引优化,那么解决方案是上更高级的索引(比如 PostgreSQL, Elasticsearch ),或者上 OLAP。

    如果筛选过后的数据量大或者没有筛选,那么这个问题用符合范式的关系型数据库不可解。
    你可以选择上 OLAP。
    也可以选择在某个地方加上汇总过的数据,这个取决于具体的需求。
    Linxing
        7
    Linxing  
       2019-04-12 09:48:00 +08:00 via iPhone
    hive ?
    cs8814336
        8
    cs8814336  
       2019-04-18 16:50:17 +08:00
    分治的思想,假如你要统计 10 天内的数据,你可以尝试每天跑脚本, 统计 1 天内数据,这样假如你统计 10 天只需要把 10 天内的统计数据相加就行了.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3209 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 11:36 · PVG 19:36 · LAX 04:36 · JFK 07:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.