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

Mysql 分库分表后需要跨库 join 的问题,求指教!

  •  1
     
  •   orzxxx · 2020-07-03 12:39:06 +08:00 · 6605 次点击
    这是一个创建于 1586 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们有张用户信息表快 1000W 数据了,而且每天还在增长,所以决定进行分表。 但另外有很多 100W 不到的小表需要关联用户信息。我考虑了几个方案,希望大家给点建议。 1.把这些小表也按照相同维度分表,这样就不会跨库了,但是感觉小表没必要分,还会带来分页查询问题。 2.分两次,先把信息查出来,在进行一次 join 操作,可能要 join 多次。 3.上缓存,先把信息查出来再一个个走缓存,要考虑缓存一致的问题。 大家有更好的方案吗?

    29 条回复    2020-07-06 09:57:23 +08:00
    gz911122
        1
    gz911122  
       2020-07-03 13:30:59 +08:00   ❤️ 1
    做个 mysql 分区得了 还简单.
    1000w 也不是特别多
    baoruizhe
        2
    baoruizhe  
       2020-07-03 14:00:44 +08:00
    对呀 1000W 不多,分库分表的前提是你的 sql 优化了,索引也加了,实在没有办法了才考虑分库分表哦,我们公司单表 3000W 了都不慌
    baoruizhe
        3
    baoruizhe  
       2020-07-03 14:01:57 +08:00
    如果要分,可以考虑使用 shardingjdbc 分库分表中间件,感觉挺不错的 使用 mysql+es 组合,复查查询的全部走 es,最后拿到主键再去查询 mysql
    DreamSpace
        4
    DreamSpace  
       2020-07-03 14:12:45 +08:00
    拿到代码中组装如何。
    先去主表里取数据,把需要`JOIN`的`ids`去重后拿到另一张表去做`IN`查询。
    whahuzhihao
        5
    whahuzhihao  
       2020-07-03 14:17:00 +08:00
    才 1000w 不用着急分表吧
    yuananf
        6
    yuananf  
       2020-07-03 14:21:04 +08:00 via Android
    直接上 tidb 算了
    JasonLiHai
        7
    JasonLiHai  
       2020-07-03 14:23:56 +08:00
    1000w 松松拉,4000w 的用户表还在用
    blackshadow
        8
    blackshadow  
       2020-07-03 14:26:52 +08:00
    1000w,没必要吧。 优化一下查询 sql,建立合理的索引。 实在不行,升级一下硬件。
    yongjing
        9
    yongjing  
       2020-07-03 14:26:52 +08:00 via Android
    7000w 也没感觉有什么瓶颈
    linxb
        10
    linxb  
       2020-07-03 14:37:11 +08:00   ❤️ 1
    1000w 简直小菜一碟,你太看不起 mysql 了
    xuanbg
        11
    xuanbg  
       2020-07-03 15:43:16 +08:00
    我们系统里面用户的热数据基本都走缓存,读写用户表是极个别现象。所以哪怕上千万也就不去管它了,稍微慢点一点都不影响什么。
    sagaxu
        12
    sagaxu  
       2020-07-03 15:47:53 +08:00 via Android
    才 1000 万也要分表?用户表 1 亿也毫无压力。
    DelayNoMay
        13
    DelayNoMay  
       2020-07-03 15:53:21 +08:00
    才 1000 万就要分表,我有张 10 亿的表也照样飞起
    phpbest
        14
    phpbest  
       2020-07-03 15:56:36 +08:00
    库内分表和分区表,有啥区别,有大佬解释一下吗
    mitu9527
        15
    mitu9527  
       2020-07-03 15:58:20 +08:00
    @DelayNoMay 10 亿的是动态表?还是静态表?文件大小不得有几十个 G 了。
    bzj
        16
    bzj  
       2020-07-03 16:03:21 +08:00   ❤️ 1
    根据我多年经验,事实上采用 MySQL 的项目 90%都用不到分库分表, 真正用得上的不会用 MySQL
    cubecube
        17
    cubecube  
       2020-07-03 16:30:00 +08:00 via Android   ❤️ 6
    当年被 cto 一上来就分库分表,搞得想死。最后那个项目客户数不到 1w
    594duck
        18
    594duck  
       2020-07-03 16:34:45 +08:00 via iPhone
    @DelayNoMay 10 亿多宽,是只写不查么
    srx1982
        19
    srx1982  
       2020-07-03 16:39:57 +08:00
    分个区就得了,别瞎改
    caola
        20
    caola  
       2020-07-03 16:47:42 +08:00
    1000W 这太少了点吧,
    除非你的查询都不走索引,那确实会慢……
    leonidas
        21
    leonidas  
       2020-07-03 17:05:10 +08:00
    楼主问分库分表连表查询的解决方案,楼上全是 1000 万太少了,不分。。。

    那我替楼主改下吧,100 亿的数据分库分表如何连表查询
    NoString
        22
    NoString  
       2020-07-03 17:16:42 +08:00
    @leonidas #21 100 亿建议走搜索引擎,如果是时间近距查询就 es 如果是字段列查询就 hbase 哈哈哈
    gadsavesme
        23
    gadsavesme  
       2020-07-03 17:20:05 +08:00
    1000w 数据正常的分区就可以了吧。没明白为什么和小表 join 会跨库。和用户表不在一个库里吗?个人觉得要么做一些冗余的字段,要么就是用户表做一下冷热垂直拆分,join 的那些字段单独拆成一张表呗不做分区。1000w 数据走索引应该不会出现性能上的瓶颈才是
    chendy
        24
    chendy  
       2020-07-03 17:31:24 +08:00
    @cubecube #17 太真实了
    cubecube
        25
    cubecube  
       2020-07-03 17:39:44 +08:00 via Android
    @chendy 关键是公司有 oracle 授权,我说直接 oracle 快速上线吧,结果 mysql 愣是分 100 多个表。商城性质,中间处理各种跨库场景,天天加班,延期。。最后,你懂的。
    dongisking
        26
    dongisking  
       2020-07-03 18:02:03 +08:00
    @phpbest 分区的横向扩展性差,等于加了个磁盘,io 没变化
    freelancher
        27
    freelancher  
       2020-07-03 23:53:09 +08:00
    1000W 用户没必要分库分表啊。优化做好来,请个专门搞这个的 DBA 就好了。给自己加活。

    兼职 DBA 在这里。。。举手。
    lance6716
        28
    lance6716  
       2020-07-05 15:50:19 +08:00 via Android
    换 tidb
    phpbest
        29
    phpbest  
       2020-07-06 09:57:23 +08:00
    @dongisking 那库内分表有作用吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1012 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 21:05 · PVG 05:05 · LAX 13:05 · JFK 16:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.