`

【转】Mysql MERGE引擎简介

 
阅读更多

http://blog.csdn.net/qmhball/article/details/7499432

 

一. 什么是MERGE引擎
MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询。

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

 

三. 举例
假设有如下两表

[sql] view plaincopy
 
  1. CREATE TABLE `t1` (     
  2. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,     
  3. `log` varchar(45) ,     
  4. PRIMARY KEY (`id`)   
  5. ) ENGINE=MyISAM;  
[sql] view plaincopy
 
  1. CREATE TABLE `t2`(     
  2. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,     
  3. `log` varchar(45) ,     
  4. PRIMARY KEY (`id`)   
  5. ) ENGINE=MyISAM;  

假设t1t2中都有如下记录

+----+-------+

| id | log   |

+----+-------+

|  1 | test1 |

|  2 | test2 |

|  3 | test3 |

+----+-------+

建立MERGE

[sql] view plaincopy
 
  1. CREATE TABLE `t` (     
  2. `id` int(10) unsigned NOT NULL AUTO_INCREMENT,     
  3. `log` varchar(45) NOT NULL,     
  4. PRIMARY KEY (`id`)   
  5. ) ENGINE=MERGE UNION=(t1, t2) INSERT_METHOD=LAST;  

执行select * from t;将会得到如下结果
+----+-------+
| id | log   |
+----+-------+
|  1 | test1 |
|  2 | test2 |
|  3 | test3 |
|  1 | test1 |
|  2 | test2 |
|  3 | test3|
+----+-------+

从效果上看,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指明插入方式,取值可以是:不允许插入;FIRST 插入到UNION中的第一个表; LAST 插入到UNION中的最后一个表
4MERGE表及构成MERGE数据表结构的各成员数据表必须具有完全一样的结构。每一个成员数据表的数据列必须按照同样的顺序定义同样的名字和类型,索引也必须按照同样的顺序和同样的方式定义。

四. Cookie问答
1)建表时UNION指明的子表如果存在相同主键的记录会怎么样?
相同主键的记录会同时存在于MERGE中,就像第三节中的例子所示。但如果继续向MERGE表中插入数据,若数据主键已存在则无法插入。换言之,MERGE表只对建表之后的操作负责。

2)若MREGE后存在重复主键,按主键查询会是什么结果?
顺序查询,只出现一条查询记录即停止。比如第三节中的例子,如果执行

[sql] view plaincopy
 
  1. select * from t where id=1;  


只会得到结果
+----+--------+
| id | log    |
+----+--------+
|  1 | test1  |
+----+--------+

 

3)直接删除一个子表会出现什么情况,正确删除的方式是怎样的?
MERGE表会被破坏,正确方式是用alter table方式先将子表从MERGE表中去除,再删除子表。
以第三节中的例子为例,执行如下操作

[sql] view plaincopy
 
  1. alter table t ENGINE=MRG_MyISAM UNION=(t1) INSERT_METHOD=LAST;  


可以从MERGE表中去除t2,这里你可以安全的对t2进行任何操作了。

 

4)误删子表时,如何恢复MERGE表?
误删子表时,MERGE表上将无法进行任何操作。
方法1drop MERGE表,重建。重建时注意在UNION部分去掉误删的子表。
方法2,建立MERGE表时,会在数据库目录下生成一个.MRG文件,比如设表名为t,则文件名为t.MRG
文件内容类似:
t1
t2
#INSERT_METHOD=LAST
指明了MGEGE表的子表构成及插入方式。
可以直接修改此文件,去掉误删表的表名。然后执行flush tables即可修复MERGE表。

 

5MERGE的子表中之前有记录,且有自增主键,则MERGE表创建后,向其插入记录时主键以什么规则自增?
以各表中的AUTO_INCREMENT最大值做为下一次插入记录的主键值。
比如t1的自增ID6t24,则创建MERGE表后,插入的下一条记录ID将会是7

 

6)两个结构完全相同的但已存在数据的表,是否一定可以合成一个MEREGE表?
从实验的结果看,不是这样的,有时创建出的表,无法进行任何操作。
所以,推荐的使用方法是先有一个MERGE表,里面只包含一张表,当一个这个表的的大小增长到一定程度(比如200w)时,创建另一张空表,将其挂入MERGE表,然后继续插入记录。

 

7)删除MERGE表是否会对子表产生影响?
不会

 

8MREGE表的子表的ENGIN是否有要求?
有的,必须是MyISAM

 

:
官方给出的关于MERGE表存在的一些问题
http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html#merge-table-problems
如果需要把日志纪录不停的录入MySQL数据库,并且每天、每周或者每个月都创建一个单一的表,而且要时常进行来自多个表的合计查询,MERGE表这时会非常简单有效。

分享到:
评论

相关推荐

    Mysql合并表Merge引擎

    1.Merge(MRG_MyISAM)存储引擎类型允许你把许多结构相同的表合并为一个表。当从合并表中执行查询,从多个表返回的结果就像从一个表返回的结果一样。 2.要创建合并表的前提是每一个合并的表必须有同样的表定义(表结构...

    MySQL存储引擎简介

    如MEMORY存储引擎适合用于创建临时表,MERGE存储引擎适用于多个MyISAM表合并成为一个表,NDB存储引擎则适用于构建分布式数据库。 在未来的版本中,MySQL持续优化其存储引擎的特性,开发者需要关注新的特性更新,...

    MySQLMerge存储引擎

    MySQLMerge存储引擎是一种特殊的存储引擎,它允许将多个MyISAM表组合成一个逻辑上的大表,以便于管理和查询。这种引擎的主要目的是为了提供一种高效的方式来处理大量的分年度或分时间段的数据,例如日志记录或其他...

    mysql-存储引擎-实验四.docx

    在实验中,我们使用 MySQL 8.0 查看了支持的存储引擎,包括 InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、EXAMPLE、FEDERATED、Archive、Merge 等。不同的存储引擎有不同的特点和使用场景,在选择存储引擎时需要根据...

    mysql存储引擎介绍

    除了 MyISAM 和 InnoDB 之外,MySQL 还提供了其他几个存储引擎,如 MEMORY、MERGE 等。 MEMORY 存储引擎是一种基于内存的存储引擎,数据存储在内存中,访问速度非常快,但是数据不是持久性的,服务器重启后数据将会...

    Mysql的MERGE存储引擎详解

    在日志记录、历史数据存储等场景下,MERGE引擎能提供很大的便利。 首先,要创建一个MERGE表,你需要有一组结构相同的MyISAM表。这些表的列定义、数据类型、索引顺序和方式都必须一致。例如,对于日志记录,我们可以...

    MySQL存储引擎学习

    MySQL支持多种存储引擎,如InnoDB、MyISAM、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等。 InnoDB是MySQL5.5之后的默认存储引擎,提供了具有提交、回滚和崩溃恢复能力的事务...

    MySQL数据库:MySQL存储引擎.pptx

    MySQL 5.7支持的存储引擎有:InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV和BLACKHOLE等。 可以利用语句:show engines; 查看系统所支持的引擎类型。;1.InnoDB存储引擎 InnoDB是事务型数据库的首选引擎...

    第6章MySQL存储引擎与数据库.docx

    MySQL存储引擎是数据库管理系统的核心组件,它决定了数据如何在MySQL中存储、检索和管理。不同的存储引擎具有不同的特性和用途,以适应各种应用场景。在MySQL中,存储引擎主要负责数据的物理存储方式、事务处理、...

    MySQL课程之MySQL存储引擎入门

    MySQL提供了多种存储引擎,包括MyISAM、InnoDB、BDB、Memory、Merge、Archive、Federated、BLACKHOLE、Cluster/NDB、CSV和Example等。其中,InnoDB、NDB和BDB支持事务处理,提供了一定的数据一致性保障,而其他引擎...

    mysql-存储引擎和数据库对象实验五.docx

    本实验报告主要介绍 MySQL 中的存储引擎和数据库对象,涵盖了 MEMORY 存储引擎、MERGE 存储引擎、CHAR、VARCHAR、TEXT、BLOB 等类型的使用和特点,以及浮点数、定点数、日期类型的使用和设置规则。 一、MEMORY 存储...

    MYSQL数据库存储引擎介绍

    对于MYSQL常见的数据库存储引擎做了介绍,DBD、HEAP、ISAM、MERGE、MyIAS、InnoDB以及Gemeni等

    MySQL存储引擎源码学习.zip

    除了这些常见的引擎,还有如Archive用于长期归档数据,Merge用于合并多个MyISAM表,以及Federated用于连接远程MySQL服务器等。每个引擎的实现都值得深入研究,它们在处理数据存储、索引、并发控制等方面都有各自的...

    如何选择合适的MySQL存储引擎.doc

    5. **MERGE**:MERGE引擎允许将多个MyISAM表合并为一个逻辑表,这对于大数据仓库或需要批量处理大量相似数据的情况很有用。 6. **ARCHIVE**:存储引擎主要用于存储大量的历史记录,如日志或归档数据,不支持索引,...

    mysql 存储引擎和表类型

    5. **MERGE**:MERGE存储引擎允许将多个MyISAM表合并为一个逻辑表进行操作,这在需要分片或分区大量数据时非常有用。它不提供事务处理,适用于大数据量的非事务性应用。 6. **FEDERATED**:FEDERATED引擎允许在远程...

    Mysql 表类型(存储引擎)

    MySQL数据库系统支持多种表类型,也称为存储引擎。这些存储引擎各具特色,适用于不同的应用场景,从而满足用户在性能、可扩展性、事务安全性等方面的需求。以下是对MySQL中几种主要表类型的详细介绍: 1. **InnoDB*...

Global site tag (gtag.js) - Google Analytics