MySQL Merge存储引擎

Merge存储引擎同意将一组使用MyISAM存储引擎的而且表结构同样(即每张表的字段顺序、字段名称、字段类型、索引定义的顺序及其定义的方式必须同样)的数据表合并为一个表,方便了数据的查询。

如果有log_2004、log_2005、log_2006、log_2007 这四张日志记录表,其数据各自是每一年的数据,表结构例如以下(YY代表年份):

CREATE TABLE log_YY (
	  dt  DATETIME NOT NULL,
	  info VARCHAR(100) NOT NULL,
	  INDEX (dt)
) ENGINE = MyISAM;

能够通过例如以下SQL语句把这些表归拢为一个逻辑单元:

CREATE TABLE log_merge(
	    dt DATETIME NOT NULL,
	    info VARCHAR(100) NOT NULL,
	    INDEX(dt)
) ENGINE = MERGE UNION = (log_2004, log_2005, log_2006, log_2007);

说明:ENGINE选项的值必须是MERGE;UNION选项列出了将被收录在这个log_merge数据表的全部表。

该log_merge表创建成功后,就能够像普通表那样查询它。仅仅是每一次查询都将同一时候作用于构成它的每个成员数据表 。譬如查询这些日志数据表的数据行总数:

SELECT COUNT(*) FROM log_merge;

譬如查询每年各有多少日志记录:

SELECT YEAR(dt) AS y, COUNT(*) AS entries FROM log_merge GROUP BY y;

创建MERGE存储引擎的表也支持DELETE 和UPDATE操作。INSERT操作比較麻烦,由于MySQL须要知道应该把新数据行插入到哪一个成员表里去。在MERGE存储引擎数据表的定义里能够包含一个INSERT_METHOD选项(MySQL4.0之后支持),这个选项的值有NO、FIRST、LAST三个,其含义依次是禁止INSERT操作、将数据行插入到UNION中的第一个表或将数据行插入到UNION中的最后一个表。比方以下SQL语句指定将新数据加入到log_2007数据表----它是UNION选项所列出的最后一个数据表:

CREATE TABLE log_merge(
	    dt DATETIME NOT NULL,
	    info VARCHAR(100) NOT NULL,
	    INDEX(dt)
) ENGINE = MERGE UNION = (log_2004, log_2005, log_2006, log_2007)
INSERT_METHOD = LAST;

创建一个新的成员数据表log_2009并让它有同样的表结构,然后改动log_merge数据表把log_2009包含进来:

CREATE TABLE log_2009 LIKE log_2008;
ALTER TABLE log_merge
UNION = (log_2004, log_2005, log_2006, log_2007,log_2008,log_2009);

注意:使用Merge“合并”起来的表结构同样的表最好不要有主键,否则会出现这样的情况:一共同拥有两个成员表,其主键在两个表中存在同样情况,可是写了一条按同样主键值查询的SQL语句,这时仅仅能查到UNION列表中第一个表中的数据。

时间: 2024-08-08 09:38:55

MySQL Merge存储引擎的相关文章

MySQL MERGE存储引擎 简介

MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询.构成一个MERGE数据表结构的各成员MyISAM数据表必须具有完全一样的结构.每一个成员数据表的数据列必须按照同样的顺序定义同样的名字和类型,索引也必须按照同样的顺序和同样的方式定义. 假设你有几个日志数据表,他们内容分别是这几年来每一年的日志记录项,他们的定义都是下面这样,YY代表年份: [sql]CREATE TABLE log_YY ( dt DATETIME NOT NULL, info VA

使用Merge存储引擎实现MySQL分表

一.使用场景 Merge表有点类似于视图.使用Merge存储引擎实现MySQL分表,这种方法比较适合那些没有事先考虑分表,随着数据的增多,已经出现了数据查询慢的情况. 这个时候如果要把已有的大数据量表分开比较痛苦,最痛苦的事就是改代码.所以使用Merge存储引擎实现MySQL分表可以避免改代码. Merge引擎下每一张表只有一个MRG文件.MRG里面存放着分表的关系,以及插入数据的方式.它就像是一个外壳,或者是连接池,数据存放在分表里面. 对于增删改查,直接操作总表即可. 二.建表 1.用户1表

用Merge存储引擎中间件实现MySQL分表

觉得一个用Merge存储引擎中间件来实现MySQL分表的方法不错. 可以看下这个博客写的很清楚--> http://www.cnblogs.com/xbq8080/p/6628034.html 另外,触发器的用法如下: 1 ## mysql触发器 2 3 t1 表 插入数据 就也更新t2表 4 5 ```mysql 6 (首先 \d // 是修改delimiter的快捷方式,用//结束语句,不用可以换回来 \d ; 这样可以变回用分号 ';' 结束语句) 7 #创建写入的触发器 8 create

Mysql 之 MERGE 存储引擎

MERGE 存储引擎把一组 MyISAM 数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询.构成一个 MERGE 数据表结构的各成员 MyISAM 数据表必须具有完全一样的表结构.每一个成员数据表的数据列必须按照同样的顺序定义同样的名字和类型,索引也必须按照同样的顺序和同样的方式定义.假设你有几个日志数据表,他们内容分别是这几年来每一年的日志记录项,他们的定义都是下面这样,YY 代表年份 CREATE TABLE log_YY ( dt DATETIME NOT NULL, info

[转帖]mysql常用存储引擎(InnoDB、MyISAM、MEMORY、MERGE、ARCHIVE)介绍与如何选择

mysql常用存储引擎(InnoDB.MyISAM.MEMORY.MERGE.ARCHIVE)介绍与如何选择原创web洋仔 发布于2018-06-28 15:58:34 阅读数 1063 收藏展开 https://blog.csdn.net/CSDN___LYY/article/details/80844606 一:前言 数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建.查询.更新和删除数据.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的

MySQL常用存储引擎

MySQL存储引擎主要有两大类: 1. 事务安全表:InnoDB.BDB. 2. 非事务安全表:MyISAM.MEMORY.MERGE.EXAMPLE.NDB Cluster.ARCHIVE.CSV.BLACKHOLE.FEDERATED等. MySQL默认的存储引擎是MyISAM(5.7版本中默认为InnoDB). 配置文件中设置默认存储引擎的参数: default-table-type. 查询当前数据库支持的存储引擎: show engines; show variables like 'h

mysql 的存储引擎介绍

在数据库中存的就是一张张有着千丝万缕关系的表,所以表设计的好坏,将直接影响着整个数据库.而在设计表的时候,我们都会关注一个问题,使用什么存储引擎.等一下,存储引擎?什么是存储引擎? 什么是存储引擎? MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能. 例如,如果你在研究大量的临时数据,你也许需要使用内存MySQL

mysql数据库存储引擎及区别

MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用:MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(BerkeleyDB).EXAMPLE.FEDERATED.ARCHIVE.CSV.BLACKHOLE. mysql的存储引擎包括:MyISAM.InnoDB.BDB.MEMORY.MERGE.EXAMPLE.NDBCluster.ARCHIVE.CSV.BLACKHOLE.FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎都是

(5)mysql常用存储引擎

概述 ??mysql5.5之前默认存储引擎是MyISAM,5.5之后改为InnoDB.若要修改默认引擎,可以修改配置文件中的default-storage-engine.可以通过show engines来查看当前数据库支持的引擎.使用select engine from information_schema.engines where transactions = 'yes';来查看哪些引擎支持事务.在创建表到时候通过engine=...或type=...来指定所要使用到引擎. MyISAM 它