水平分表可以提高查询的效率,但是如果订单表分了100个表,我要查询一个用户全部的订单,这样如何处理呢?
order1....order100
假如用户uid=6 uid%100=6 那就存在order6表中
假如用户uid=300 uid%100=0 那就存在order100表中
使用用户uid与100求余数,去查询余数对应的订单表就能获取该用户的全部订单数据
4 回答13.5k 阅读✓ 已解决
5 回答7.9k 阅读✓ 已解决
2 回答7.6k 阅读✓ 已解决
2 回答6.7k 阅读✓ 已解决
1 回答5.3k 阅读✓ 已解决
1 回答5.1k 阅读✓ 已解决
5 回答735 阅读✓ 已解决
不清楚你的具体业务场景,如果你的业务场景中对用户数据的查询较多,那么分表的策略应该是和用户相关的,尽量保证每个用户的数据在同一张表中。
如果是对订单ID进行的分表,并且划分了100张表的话,单纯的使用union all是不好的,每次union的时候都要将这100张表的查询结果进行union这样操作既麻烦对mysql也不优雅。
在不能修改分表策略的前提下,推荐使用MyISAM merge引擎。对于MyISAM merge的相关知识可以自行google。