mysql分表查询问题

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

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

_jue
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

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

Apache ShardingSphere

mycat

and so on

3周前 评论
jcleng 3周前
kis龍 (作者) 3周前
讨论数量: 17

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

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

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

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

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

Apache ShardingSphere

mycat

and so on

3周前 评论
jcleng 3周前
kis龍 (作者) 3周前

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

3周前 评论
_jue (楼主) 3周前
chowjiawei

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

3周前 评论

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

3周前 评论

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

1.联表

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

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

3周前 评论

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

3周前 评论
_jue (楼主) 3周前

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

3周前 评论
sanders

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

3周前 评论

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

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

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

3天前 评论

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