sydomain

思绪来的快,去的也快,偶尔在这里停留。

水平分表

 水平分表

水平分表,表类型是`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`

```


表损坏

一般分表时,如果分表损坏,基本都是主表损坏,删除重建即可


Powered By sydomain

Copyright Your WebSite.Some Rights Reserved.