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

mysql 单表数据过大最好的处理方式

  •  
  •   blueorange · 2019-04-01 09:25:13 +08:00 via Android · 9112 次点击
    这是一个创建于 2062 天前的主题,其中的信息可能已经有所发展或是发生改变。

    已经严重影响查询性能,纯粹添加索引会影响插入性能,请问还有其他方式么

    25 条回复    2019-04-02 16:07:13 +08:00
    blueorange
        1
    blueorange  
    OP
       2019-04-01 09:25:40 +08:00 via Android
    已经达到千万级别
    jyounn
        2
    jyounn  
       2019-04-01 09:28:18 +08:00
    分区
    lhx2008
        3
    lhx2008  
       2019-04-01 09:29:04 +08:00 via Android
    先加索引啊,不加索引你事务插入要锁表的
    zuoakang
        4
    zuoakang  
       2019-04-01 09:29:19 +08:00 via Android
    分区,分表,分库。
    reus
        5
    reus  
       2019-04-01 09:32:26 +08:00   ❤️ 1
    千万不算过大
    索引该用就用
    jabin88
        6
    jabin88  
       2019-04-01 09:37:51 +08:00
    同步到 mongodb 或者 es,这样就不用查 mysql 了,再多 10 倍都可以
    blueorange
        7
    blueorange  
    OP
       2019-04-01 09:54:50 +08:00
    @jabin88 有什么好的方案实时同步吗?
    dapang1221
        8
    dapang1221  
       2019-04-01 09:58:01 +08:00
    比较好奇以前不加索引你是怎么查的……语句都是全表扫么……
    ducklyl
        9
    ducklyl  
       2019-04-01 10:51:20 +08:00
    如果只是影响查询性能,可以把数据同步到 es 或 solr,使用全文检索提高查询性能
    sujin190
        10
    sujin190  
       2019-04-01 11:37:25 +08:00
    如果只是 4 到 5 项索引,写性能影响不大吧,除非你写特别多,如果每秒过千的写,估计也不是单表千万数据的问题了
    千万级别对 mysql 数据真不算大,如果索引超过内存很多,倒是可以多加点内存,索引和查询缓存的效果还是很明显的
    chaleaochexist
        11
    chaleaochexist  
       2019-04-01 11:45:59 +08:00
    分区.分表.分库.
    opengps
        12
    opengps  
       2019-04-01 11:47:57 +08:00
    每月重复一次。如果不是分布式 DRDS 那种方案的话:
    先考虑表分区
    然后考虑分表
    然后考虑分库
    blueskea
        13
    blueskea  
       2019-04-01 12:08:50 +08:00 via Android
    拆表,分区,读写分离,canal 同步到 hive es tidb 之类
    opengps
        14
    opengps  
       2019-04-01 12:12:28 +08:00
    补上我的经历: https://www.opengps.cn/Blog/View.aspx?id=284
    GPS 密集写入案例:单机数据库阶段,sql server 使用表分区,线上应用最大单日写入 1500 万行,最大单表大小 12 亿
    没有更高实际应用数值的原因是替换了别的数据库
    mmdsun
        15
    mmdsun  
       2019-04-01 12:46:56 +08:00 via Android
    单表行数超过 500 万行或者单表容量超过 2 GB,推荐进行分库分表。
    qianji201712
        16
    qianji201712  
       2019-04-01 12:47:28 +08:00
    @opengps 大佬,学习了!
    opengps
        17
    opengps  
       2019-04-01 12:52:53 +08:00
    @qianji201712 怪我嘴拙,当时是 2012 年,设计这张表的时候不会写文章,至今才整理成可以让人看懂的文字
    iyaozhen
        18
    iyaozhen  
       2019-04-01 13:05:51 +08:00 via Android
    要看几千万还有未来的趋势,1 亿以下表分区就行了。

    再多就要分库分表了,业务层也需要改动
    love
        19
    love  
       2019-04-01 13:10:37 +08:00
    现在都 ssd,千万算个啥,除非你没索引全表扫描了
    hilbertz
        20
    hilbertz  
       2019-04-01 13:14:55 +08:00
    128g 内存,ssd 硬盘,几十亿都没问题
    Radom
        21
    Radom  
       2019-04-01 14:17:55 +08:00
    千万也算大?
    mineqiqi
        22
    mineqiqi  
       2019-04-01 14:37:13 +08:00
    千万级别的加索引完全能解决
    Joyboo
        23
    Joyboo  
       2019-04-01 14:44:07 +08:00
    还以为是每日千万级别。。
    sean328
        24
    sean328  
       2019-04-01 23:57:08 +08:00
    不推荐分区,千万级别数据单表索引合理日常增删改查完全是没问题的,再多的话再考虑分表分库
    Evilk
        25
    Evilk  
       2019-04-02 16:07:13 +08:00
    之前单表数据在 5000W 左右,用的分区,后面如果持续增长的话,可以考虑 es,分表.分库不太建议,业务层也要改动,成本太高
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   914 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:59 · PVG 05:59 · LAX 13:59 · JFK 16:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.