分表可以适当的减轻数据库压力,当一个表数据很庞大的时候,对其进行操作的时间就会越长。
分表设计原则:
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;
当查询数据的时候,通过一定的算法根据需求,查询对应的表,可通过查询主表查询所有的数据,由于查询主表的数据没有唯一标识字段,需要在设计分表的时候考虑到字段唯一性