在这里需要注意建立MRG_MYISAM需要必须指定一个UNION=(list-of-tables)子句,它说明你要把哪些表当作一个表来用.另外一个重要的参数INSERT_METHOD,此参数INSERT_METHOD = NO 表示该表不能做任何写入操作只作为查询使用,INSERT_METHOD = LAST表示插入到最后的一张表里面.
例子:
mysql> show create table test\G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(10) DEFAULT NULL,
KEY `id` (`id`)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=LAST UNION=(`test1`,`test2`)
1 row in set (0.00 sec)
mysql> CREATE TABLE `test` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(10) DEFAULT NULL,KEY `id` (`id`))ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=NO UNION=(`test1`,`test2`);
Query OK, 0 rows affected (0.00 sec)
mysql> select * from test;
+----+----------+
| id | name |
+----+----------+
| 1 | beijing1 |
| 1 | beijing2 |
| 2 | beijing3 |
+----+----------+
3 rows in set (0.00 sec)
mysql> INSERT INTO `test` (`name`) VALUES('beijing4');
ERROR 1036 (HY000): Table 'test' is read only
当你需要在现有MRG_MYISAM添加新表的时候可以这样做
mysql> create table test3 (id int not null auto_increment,name varchar(10) default null ,primary key (id)) engine=myisam auto_increment=1;
Query OK, 0 rows affected (0.02 sec)
mysql> alter table test engine=mrg_myisam union=(test1,test2,test3 ) insert_method=last;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> select * from test;
+----+----------+
| id | name |
+----+----------+
| 1 | beijing1 |
| 1 | beijing2 |
| 2 | beijing3 |
+----+----------+
3 rows in set (0.00 sec)
mysql> INSERT INTO `test` (`name`) VALUES('beijing4');
Query OK, 1 row affected (0.00 sec)
mysql> select * from test;
+----+----------+
| id | name |
+----+----------+
| 1 | beijing1 |
| 1 | beijing2 |
| 2 | beijing3 |
| 3 | beijing4 |
+----+----------+
4 rows in set (0.00 sec)
mysql> select * from test3;
+----+----------+
| id | name |
+----+----------+
| 3 | beijing4 |
+----+----------+
1 row in set (0.00 sec)
OK,完成了.
对于日常来说MRG_MYISAM分表优点主要有以下几点:
(1)对于日志类应用的表.比如,你可以把每月的数据放进分离的表中,用myisampack压缩这些表,创建一个MERGE表来把它们当作一个表来使用非常方便快捷.
(2)在查询速度上应该更优,对于一些表可以分割大的只读表,放进不同磁盘上的单个表中.基于这个建立一个MERGE表会比单纯一个大表速度应该会快不少.
(3)超过操作系统的文件尺寸限制,每个MyISAM表都受制于这个限制,但是MRG_MYSIAM则不会.
缺点:
MRG_MYISAM不支持全文索引还有其它一些MyISAM功能,当然可以在底表创建,但是仍然不能利用全文索引在MRG表上搜索.建立全文会报如下错误
ERROR 1214 (HY000): The used table type doesn't support FULLTEXT indexes