分表可以适当的减轻数据库压力,当一个表数据很庞大的时候,对其进行操作的时间就会越长。

分表设计原则:

1. 此表类似于SQL中的union机制。
2. 此表结构必须与基本表完全一致,包括列名、顺序。UNION表必须同属一个DATABASE。
3. 基本表类型必须是MyISAM。
4. 可以通过修改.mrg文件来修改MERGE表,每个基本表的名字占一行。注意:修改后要通过FLUSH TABLES刷新表缓存。
5. 对基本表的更改可以直接反映在此表上。
6. INSERT_METHOD的取值可以是: 0 不允许插入 FIRST 插入到UNION中的第一个表 LAST 插入到UNION中的最后一个表。(4.0之后可用)
7. 定义在它上面的约束没有任何作用,约束是由基本表控制的,例如两个基本表中存在着同样的一个Key值,那么在MERGE表中会有两个一样的Key值。

 

 

下面利用merge存储引擎来实现分表

1、创建子表,设计一个表名统一规则:

DROP TABLE IF EXISTS `UserTest1`;
CREATE TABLE `UserTest1`
(
    `Id`            BIGINT                AUTO_INCREMENT  NOT NULL,
    `Name`            VARCHAR(50)            NULL,
    `Sex`            VARCHAR(50)            NULL,
    PRIMARY KEY (Id)
) ENGINE=MYISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

利用like快速创建其他子表:

CREATE TABLE `UserTestn` LIKE `UserTest1`;

插入数据:

NSERT INTO `UserTest1` (`Name`, `Sex`) VALUES('测试人员1', 0);

利用select给其他子表快速插入数据:

INSERT INTO `UserTestn`(`Name`, `Sex`) SELECT `Name` ,`Sex` FROM `UserTest1`;

子表创建结束后,创建主表

DROP TABLE IF EXISTS `AllUserTest`;
CREATE TABLE `AllUserTest`
(
    `Id`            BIGINT                AUTO_INCREMENT  NOT NULL,
    `Name`            VARCHAR(50)            NULL,
    `Sex`            VARCHAR(50)            NULL,
    INDEX (Id)
) ENGINE=MERGE UNION=(`UserTest1`,`UserTest2`,...,`UserTestn`) INSERT_METHOD=LAST CHARSET=utf8 AUTO_INCREMENT=1;

当查询数据的时候,通过一定的算法根据需求,查询对应的表,可通过查询主表查询所有的数据,由于查询主表的数据没有唯一标识字段,需要在设计分表的时候考虑到字段唯一性

posted on 2018-11-01 10:21  vofill-work  阅读(190)  评论(0编辑  收藏  举报