水平分表后如果进行全部数据的查询

水平分表可以提高查询的效率,但是如果订单表分了100个表,我要查询一个用户全部的订单,这样如何处理呢?

阅读 9k
6 个回答

不清楚你的具体业务场景,如果你的业务场景中对用户数据的查询较多,那么分表的策略应该是和用户相关的,尽量保证每个用户的数据在同一张表中。
如果是对订单ID进行的分表,并且划分了100张表的话,单纯的使用union all是不好的,每次union的时候都要将这100张表的查询结果进行union这样操作既麻烦对mysql也不优雅。
在不能修改分表策略的前提下,推荐使用MyISAM merge引擎。对于MyISAM merge的相关知识可以自行google。

order1....order100

假如用户uid=6 uid%100=6 那就存在order6表中
假如用户uid=300 uid%100=0 那就存在order100表中
使用用户uid与100求余数,去查询余数对应的订单表就能获取该用户的全部订单数据

union 连一下

使用union all连接, 不要用union, 否则会有一个比较去重的过程, 在你这种情况下肯本不需要。
参考: 官方文档

不知道你用不用数据分片中间件,中间件提供路由和数据聚合的功能,不需要你改代码。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏