水平分表
水平分表,表类型是`MyISAM`,也有说`InnoDB`的,但是`InnoDB`通常都是用的分区`PARTITION`
主表与分表
水平分表中存在主表与分表,主表是通过`SQL`来读写的表,里面没有数据,分表是真正存储数据的表
创建分表
假设数据表:`article_list`需要水平分表,并且不变动原有程序,主表名也定为`article_list`
要分表的时候,分表和主表建立的顺序不分先后,但是为了少改一次名字,可以先从建立分表开始
确认表引擎
可使用`show table`之类的命令查看原始表引擎是否为`MyISAM`,如不是则修改
```
ALTER TABLE `article_list` ENGINE = MyISAM;
```
第一张分表
为了不占用主表名,变更原主表的名称,名称可以任意,为了点清数量,我用数字结尾
```
ALTER TABLE `article_list` RENAME TO `article_list_01`;
```
其它分表
有了`article_list_01`,其它的分表可以用`02`,`03`,`04`,`05`任意都行,只要不占用主表名就行
所有分表的表结构,引擎,编码,类型都要一致
创建主表
主表结构也要与分表一致,只是引擎需要变更为`MRG_MyISAM`
建表语句后面可使用`UNION`和`INSERT_METHOD`来完善主表
`UNION`指定需要组合数据的分表名
`INSERT_METHOD`指定是否新增数据,支持值为`NO`,`FIRST`,`LAST`,`NO`为不能新增,`FIRST`为新增到`UNION`的第一张表,`LAST`为新增到`UNION`的最后一张表
如我现在需要组合`article_list_01`,`article_list_02`,`article_list_03`,新数据写到`article_list_03`,建表语句就为
``` CREATE TABLE `article_list` ( ...... ) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=LAST UNION=(`article_list_01`,`article_list_02`,`article_list_03`); ```
查询表
现在主表是`article_list`,分表是`article_list_01`,`article_list_02`,`article_list_03`,4张表都可以使用`SELECT`进行查询,唯一不同的是,`SELECT * FROM article_list`等于`SELECT * FROM article_list_01 UNION ALL SELECT * FROM article_list_02 UNION ALL SELECT * FROM article_list_03`
检查表
检查表是否正常时,通常都是检查主表
```
check table `article_list`
```
表损坏
一般分表时,如果分表损坏,基本都是主表损坏,删除重建即可