-

MERGE引擎及应用场景

MySQL

一. 什么是MERGE引擎
MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询。构成一个MERGE数据表结构的各成员MyISAM数据表必须具有完全一样的结构。下面主要讲解下MERGE引擎的使用场景和一些常用的例子。

二. MERGE引擎应用场景
如果需要把日志纪录不停的录入MySQL数据库,并且每天、每周或者每个月都创建一个单一的表,而且要时常进行来自多个表的合计查询,MERGE表这时会非常简单有效。

三. MERGE引擎举例
假设有如下两表

[cc lang=”bash” escaped=”true”]CREATE TABLE `t1` (
`t1` tinyint(4) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
PRIMARY KEY (`t1`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1[/cc]
[cc lang=”bash” escaped=”true”] CREATE TABLE `t2` (
`t1` tinyint(4) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
PRIMARY KEY (`t1`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1[/cc]

假设t1,t2中都有如下记录

[cc lang=”bash” escaped=”true”]select * from t1 ;
+—-+——+
| t1 | name |
+—-+——+
| 1 | a |
+—-+——+
1 row in set;[/cc]

[cc lang=”bash” escaped=”true”]select * from t2
+—-+——+
| t1 | name |
+—-+——+
| 2 | b |
| 3 | c |
| 4 | e |
| 5 | f |
+—-+——+
4 rows in set[/cc]

建立MERGE表

[cc lang=”bash” escaped=”true”]CREATE TABLE `t` (
`t1` tinyint(4) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
PRIMARY KEY (`t1`)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 INSERT_METHOD=LAST UNION=(`t1`,`t2`)[/cc]
[cc lang=”bash” escaped=”true”]select * from t;
+—-+——+
| t1 | name |
+—-+——+
| 1 | a |
| 2 | b |
| 3 | c |
| 4 | e |
| 5 | f |
+—-+——+
5 rows in set[/cc]

从效果上看,t1,t2的记录如同在一张表里一样被罗列了出来。当然,看了这个结果你一定会有一些疑问,在下一节里我们会慢慢解释。现在我们主要来解释一下上面MERGE表的建表语句。
1)ENGINE=MERGE
指明使用MERGE引擎,有些同学可能见到过ENGINE=MRG_MyISAM的例子,也是对的,它们是一回事。
2)UNION=(t1, t2)
指明了MERGE表中挂接了些哪表,可以通过alter table的方式修改UNION的值,以实现增删MERGE表子表的功能。
3)INSERT_METHOD=LAST
INSERT_METHOD指明插入方式,取值可以是:0 不允许插入;FIRST 插入到UNION中的第一个表; LAST 插入到UNION中的最后一个表。
4)MERGE表及构成MERGE数据表结构的各成员数据表必须具有完全一样的结构。每一个成员数据表的数据列必须按照同样的顺序定义同样的名字和类型,索引也必须按照同样的顺序和同样的方式定义。

来源:MERGE引擎及应用场景

MERGE引擎及应用场景” 评论

    2ou 评论:
    2019年5月5日 下午8:36

    好文章!666,学习了

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注