mysql 分表后查询_Mysql分表后怎么查询效率高?

胸弟,mysql分表要慎之又慎,没有必要的情况下千万不要贸然分库分表。真到了非拆不可的时候,一定要结合实际业务,多花点时间做方案预研。像你们这个方案,按日期一天一张表,这完全是拍脑袋想出来的啊,给自己挖了个大坑。

按日期分表,而且是一天一张,这个方案最大的问题就是没分清哪些是热点数据,哪些是归档数据。看你的需求,是要查七天的数据,由于你没说清楚具体业务需求,所以有两种情况:1.只需要查最近七天的数据 2.可以随意查历史某一个跨度为7天的时间段数据。

如果是情况1,你们这种拆分方案完全是画蛇添足,因为近7天是热点数据,只需要在热点表保存近7天的数据,每天跑定时任务把上一天数据归档就行。一天300w,7天就是2100w,这样一张表并不是大的不得了的规模,设计好索引,SQL写好一点,怎么着也比你那个几十秒要强好多倍。另外除了拆分表,也可以用partition。

如果是情况2,没有特定的热点表,历史任何一个7天跨度的数据都可能要查,这样的需求除了BI分析,说实话我觉得真没必要这么干。如果是BI分析,这么大的数据量用mysql做从一开始就是错的;如果是业务查询(讲道理这样的需求真的很奇葩),得看用什么维度查,举个例子电商网站用户查自己的历史订单,这样的需求应该用userID取模做水平拆分,而不是用日期。总之这样的情况还需要具体问题具体分析,没有一成不变的方案。如果业务要求可以用任何一个维度查,按目前这种情况,恐怕没什么好方案了,每一次查询都需要跨多张表,非要做的话,也不能用union all这种最粗暴的办法,可以尝试多开几个线程,每个线程查一张表,并行着来,然后在内存中把多个结果集重新组合排序,如果CPU好点的话,理论上能快不少。

再退一万步,如果还是不行,就考虑上ES吧。不过那就是另外一个故事了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值