在互联网时代大家都知道数据量是爆炸试的增加,从之前的表结构设计来看,我们很容易的知道商品表(goods)、订单表(orders)、订单商品表(order_goods)这几张表的数据量将会爆炸试的增加。
因此,在数据量达到一定程度就算是建了索引,查询使用了索引,查询、修改速度也是会降下来的。为了额能较好的克服这样的问题,我们不得不重新整理并对大数据的表进行表切分。
当下有静态分表和动态分表两种:
如果使用了分表的设计的数据库在一些查询上面会变的复杂一些。
本着要让之后让表能更好的扩展,并能达到手工指定数据到自己想要的表,为了以后能自动化分表操作,我选择了动态分表。
由于在我们的业务中每一个导购除了能卖东西,还能买东西,因此在逻辑上就分为两张表:出售订单表、购买订单表。
业务分解后表结构图如下:
我们是按user表中的每一个用户去指定他的订单数据要在哪个表。
由于按用户分表后会涉及到是然购买者方便查询,还是让销售者方便查询的问题。我们这里选择的是让销售者查询方便来分表,因为销售者的查询和对订单的修改会频繁一些。因此,我们将出售订单表中存放着比较完整的订单信息,而在购买订单表中存放的是出售订单表的ID作为关联。
我们出购买订单表ID和售订单表ID保持一致。
小提示:你也可以在购买订单表中添加一些冗余字段为了更好的查询,但是建议冗余字段不要是业务上是可变的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | — 创建出售订单表-sell_order_1 CREATE TABLE sell_order_1 LIKE orders; — 修改出售订单表ID字段名 ALTER TABLE sell_order_1 CHANGE orders_id sell_order_id INT unsigned NOT NULL AUTO_INCREMENT COMMENT ‘出售订单ID’; — 修改商品订单表的订单ID名为sell_order_id ALTER TABLE order_goods CHANGE orders_id sell_order_id INT unsigned NOT NULL COMMENT ‘出售订单ID’; — 将orders表数据转移到sell_order_1表 INSERT INTO sell_order_1 SELECT * FROM orders; — 迁移商品表到 goods_1 CREATE TABLE goods_1 LIKE goods; — 插入goods_1表数据 INSERT INTO goods_1 SELECT * FROM goods; — 迁移订单商品表到order_goods_1 CREATE TABLE order_goods_1 LIKE order_goods; — 插入order_goods_1 INSERT INTO order_goods_1 SELECT * FROM order_goods; — 创建购买订单表 CREATE TABLE buy_order_1( buy_order_id BIGINT unsigned NOT NULL COMMENT ‘出售订单ID与出售订单相等’, user_id INT unsigned DEFAULT NULL COMMENT ‘下单用户ID’, user_guide_id INT unsigned DEFAULT NULL COMMENT ‘导购ID’, PRIMARY KEY(buy_order_id), KEY idx$buy_order_1$user_id(user_id), KEY idx$buy_order_1user_guide_id(user_guide_id) ); — 买订单表导入数据 INSERT INTO buy_order_1 SELECT sell_order_id, user_id, user_guide_id FROM sell_order_1; — user表增加指定表标识字段 ALTER TABLE user ADD table_flag TINYINT NOT NULL DEFAULT 1 COMMENT ‘分表标识’; |
文章转载来自:trustauth.cn