mysql分表查询问题

问: mysql使用了分表,以订单表为例,我们使用了日期分的月表,order_202407,order_202408, 如果要查询 7.15-8.15的数据如何查询?
答: 1. 查到临时表,再处理的分页 2. 查出数据,程序逻辑处理

问题:除了这个方案,还有其他方式处理吗?特别是数据量比较大的时候?

_jue
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

找下 数据库中间件,可以解决这个问题

Apache ShardingSphere

mycat

and so on

1个月前 评论
jcleng 1个月前
kis龍 (作者) 1个月前
讨论数量: 17

分表的目的是将大容量的数据表分散到多个小表中,减少查询IO,有跨月份查询的需求,在做分表设计时就应该考虑到,不然你做月份分表的意义是什么呢?

  1. 设置一个主表,主表的数据可以存储最近6个月-12个月以内,历史数据迁移至备份分表,不允许查询超出时间范围内的数据,查询时间范围外的数据,按分表时间单独查询某个表。
  2. 月份分表,数据量不是很大的情况下,可以使用union all,但最好也不要超出2张以上的分表union,否则分表就无意义。
1个月前 评论

找下 数据库中间件,可以解决这个问题

Apache ShardingSphere

mycat

and so on

1个月前 评论
jcleng 1个月前
kis龍 (作者) 1个月前

使用union all?根据筛选条件计算出相关的表 再通过union all连起来

1个月前 评论
_jue (楼主) 1个月前

分表的目的是将大容量的数据表分散到多个小表中,减少查询IO,有跨月份查询的需求,在做分表设计时就应该考虑到,不然你做月份分表的意义是什么呢?

  1. 设置一个主表,主表的数据可以存储最近6个月-12个月以内,历史数据迁移至备份分表,不允许查询超出时间范围内的数据,查询时间范围外的数据,按分表时间单独查询某个表。
  2. 月份分表,数据量不是很大的情况下,可以使用union all,但最好也不要超出2张以上的分表union,否则分表就无意义。
1个月前 评论
chowjiawei

模型里面设置了分表逻辑后 可以直接查询不用特殊处理

1个月前 评论

选择 TiDB 或 OceanBase ,也是一种方案

1个月前 评论

这种分表就不应该还做跨表查询

1个月前 评论
_jue (楼主) 1个月前

理论上分表是因为数据过多导致大表的性能下降才会分表,那么在流程上就不会在提供快表查询功能,但是在业务上如果有需求是可以兼容处理的,无非就是

1.联表

2.存储一份指定时间内冗余数据,比如半年内,超过这个时间不在提供直观的查询

3.数据导入其他存储,比如es,提供查询

1个月前 评论

我印象中用中间件是不好处理分页的

1个月前 评论
sanders

我们用的分区,我记得分表可以用 merge 引擎进行合并查询。但一个查询扫多张表肯定慢,分区也一样,所以一般是要强制要求查询条件必须带上分表用的字段。分页也最好是用游标方式(即:select * from orders where id < '$yourPrevPageLastID' order by id desc limit 100)。

1个月前 评论

问:项目规模是怎样的,数据量有多少,要考虑分表,能不能不分表?

2周前 评论
_jue (楼主) 2周前
寞小陌 2周前

如果可以考虑其他中间件的话,把7月数据和8月数据写入elasticsearch,然后再从es中查询合并。

1周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!