Mysql 分库分表后需要跨库 join 的问题,求指教! - V2EX
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 7113 次点击
    这是一个创建于 1926 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们有张用户信息表快 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 的用户表还在用
    wombat
        8
    wombat  
       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
    我们系统里面用户的热数据基本都走缓存,读写用户表是极个别现象。所以哪怕上千万也就不去管它了,稍微慢点一点都不影响什么。
    /tr>
    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 div class="fr">     20
    caola  
       2020-07-03 16:47:42 +08:00
    1000W 这太少了点吧,
    除非你的查询都不走索引,那确实会慢……
    novaa
        21
    novaa  
       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     Solana     5424 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 09:11 PVG 17:11 LAX 02:11 JFK 05:11
    Do have faith in what you're doing.
    ubao 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