当前位置:Gxlcms > mysql > merge存储引擎应用_MySQL

merge存储引擎应用_MySQL

时间:2021-07-01 10:21:17 帮助过:8人阅读

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表在很多情况下都可以给我们带来便利,特别是在分表的环境中尤其合适。

欢迎上网易彩票买彩票啊~

人气教程排行