merge存储引擎,也叫做mrg_myisam,可以将同构的表合在一起使用。文档上说的“同构”指的是表定义相同,表的索引相同,但根据测试,索引结构不一样也没有问题。甚至在某些情况下,必须不同才能取得正确的数据。
我们创建两个表m1,m2,并各插入几条数据。
1 mysql> show create table m1/g
2 *************************** 1. row ***************************
3 table: m1
4 create table: create table `m1` (
5 `a` int(11) not null,
6 `b` int(11) default null,
7 primary key (`a`)
8 ) engine=myisam default charset=latin1
9 1 row in set (0.00 sec)
10
11 mysql> show create table m2/g
12 *************************** 1. row ***************************
13 table: m2
14 create table: create table `m2` (
15 `a` int(11) not null,
16 `b` int(11) default null,
17 primary key (`a`)
18 ) engine=myisam default charset=latin1
19 1 row in set (0.00 sec)
20
21 mysql> select * from m1;
22 +---+------+
23 | a | b |
24 +---+------+
25 | 1 | 1 |
26 | 2 | 2 |
27 | 3 | 3 |
28 +---+------+
29 3 rows in set (0.00 sec)
30
31 mysql> select * from m2;
32 +---+------+
33 | a | b |
34 +---+------+
35 | 1 | 1 |
36 | 2 | 2 |
37 | 3 | 3 |
38 +---+------+
39 3 rows in set (0.00 sec)
接下来,我们创建一个merge表m,注意,我们没有为m指定任何的key,但是该merge表是可以使用的:
1 mysql> show create table m/g
2 *************************** 1. row ***************************
3 table: m
4 create table: create table `m` (
5 `a` int(11) not null,
6 `b` int(11) default null
7 ) engine=mrg_myisam default charset=latin1 union=(`m1`,`m2`)
8 1 row in set (0.00 sec)
9
10 mysql> select * from m;
11 +---+------+
12 | a | b |
13 +---+------+
14 | 1 | 1 |
15 | 2 | 2 |
16 | 3 | 3 |
17 | 1 | 1 |
18 | 2 | 2 |
19 | 3 | 3 |
20 +---+------+
21 6 rows in set (0.00 sec)
对m加上primary key(a)之后,毫无疑问,这也是可以使用的,但是因为key是primay key,所以只能检索出一条记录:
1 mysql> show create table m/g
2 *************************** 1. row ***************************
3 table: m
4 create table: create table `m` (
5 `a` int(11) not null,
6 `b` int(11) default null,
7 primary key (`a`)
8 ) engine=mrg_myisam default charset=latin1 union=(`m1`,`m2`)
9 1 row in set (0.00 sec)
10
11 mysql> select * from m where a=1;
12 +---+------+
13 | a | b |
14 +---+------+
15 | 1 | 1 |
16 +---+------+
17 1 row in set (0.00 sec)
将primary key改成普通的key之后:
1 mysql> alter table m add index (a), drop primary key;
2 query ok, 0 rows affected (0.00 sec)
3 records: 0 duplicates: 0 warnings: 0
4
5 mysql> select * from m where a=1;
6 +---+------+
7 | a | b |
8 +---+------+
9 | 1 | 1 |
10 | 1 | 1 |
11 +---+------+
12 2 rows in set (0.00 sec)
merge表在很多情况下都可以给我们带来便利,特别是在分表的环境中尤其合适。
欢迎上网易彩票买彩票啊~