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

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

  假设日志数据表的当前集合包括 log_2004、log_2005、log_2006、log_2007 ,而你可以创建一个如下所示的 MERGE 数据表把他们归拢为一个逻辑单元:

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 选项列出了将被收录在这个 MERGE 数据表离得各有关数据表。把这个 MERGE 创建出来后,就可以像对待任何其他数据表那样查询它,只是每一次查询都将同时作用与构成它的每一个成员数据表 。下面这个查询可以让我们知道上述几个日志数据表的数据行的总数:

SELECT COUNT(*)FROM log_merge;

  下面这个查询用来确定在这几年里每年各有多少日志记录项:

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

  除了便于同时引用多个数据表而无需发出多条查询,MERGE 数据表还提供了以下一些便利。

  1)、MERGE 数据表可以用来创建一个尺寸超过各个 MyISAM 数据表所允许的最大长度逻辑单元
  2)、经过压缩的数据表包括到 MERGE 数据表里。比如说,在某一年结束之后,你应该不会再往相应的日志文件里添加记录,所以你可以用 myisampack 工具压缩它以节省空间,而 MERGE 数据表仍可以像往常那样工作
  3)、MERGE 数据表也支持 DELETE 和 UPDATE 操作。INSERT 操作比较麻烦,因为 MySQL 需要知道应该把新数据行插入到哪一个成员表里去。在 MERGE 数据表的定义里可以包括一个 INSERT_METHOD 选项,这个选项的可取值是 NO、FIRST、LAST,他们的含义依次是 INSERT操作是被禁止的、新数据行将被插入到现在 UNION 选项里列出的第一个数据表或最后一个数据表。比如说,以下定义将对 log_merge 数据表的 INSERT 操作被当作对 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 包括进来: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);

  

Mysql 之 MERGE 存储引擎的更多相关文章

  1. Mysql的Merge存储引擎实现分表查询

    对于数据量很大的一张表,i/o效率底下,分表势在必行! 使用程序分,对不同的查询,分配到不同的子表中,是个解决方案,但要改代码,对查询不透明. 好在mysql 有两个解决方案: Partition(分 ...

  2. MYSQL利用merge存储引擎来实现分表

      创建user1和user2两个分表 建表语句如下:只是表名不一样,其他字段信息及主键一致. CREATE TABLE IF NOT EXISTS user1( id INT(11) NOT NUL ...

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

    一.使用场景 Merge表有点类似于视图.使用Merge存储引擎实现MySQL分表,这种方法比较适合那些没有事先考虑分表,随着数据的增多,已经出现了数据查询慢的情况. 这个时候如果要把已有的大数据量表 ...

  4. MySQL MERGE存储引擎 简介

    MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询.构成一个MERGE数据表结构的各成员MyISAM数据表必须具有完全一样的结构.每一个成员数据表的数据列必 ...

  5. MySQL MERGE存储引擎 简介及用法

    MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询.构成一个MERGE数据表结构的各成员MyISAM数据表必须具有完全一样的结构.每一个成员数据表的数据列必 ...

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

    觉得一个用Merge存储引擎中间件来实现MySQL分表的方法不错. 可以看下这个博客写的很清楚--> http://www.cnblogs.com/xbq8080/p/6628034.html ...

  7. MySQL MERGE存储引擎

    写这篇文章,主要是因为面试的时候,面试官问我怎样统计所有的分表(假设按天分表)数据,我说了两种方案,第一种是最笨的方法,就是循环查询所有表数据(肯定不能采用):第二种方法是,利用中间件,每天定时把前一 ...

  8. mysql缓存、存储引擎

    一.         mysql查询缓存 查询缓存不是mysql的子系统,却是查询优化和执行子系统不可缺少的组成部分.它不仅可以缓存查询结果,还可以缓存查询结果本身.如果某个查询的结果就在缓存里, 系 ...

  9. MySQL支持多种存储引擎

    MySQL的强大之处在于它的插件式存储引擎,我们可以基于表的特点使用不同的存储引擎,从而达到最好的性能. MySQL有多种存储引擎:MyISAM.InnoDB.MERGE.MEMORY(HEAP).B ...

随机推荐

  1. Apache服务器运维笔记(6)----目录 文件 网络容器的安全问题

    <Directory>.<Files>.<Location> 这三个容器的作用都很相似,都是以容器的形式来封装一组指令对访问进行控制,只是它们的区别在于作用于目录. ...

  2. VS2010环境开发Teamcenter ITK

    前言 这篇文章主要是用Teamcenter ITK开发的入门配置教程.几个月前学习ITK开发时,领导要求将配置过程整理成学习笔记.最近同事要做ITK开发,就发给他了.感觉这篇文章对别人还是有帮助的,决 ...

  3. 关于安卓开发的学习一:webview

    在网上看到几篇不错的博客,分享和学习一下! Android使用WebView加载网页 https://blog.csdn.net/tuke_tuke/article/details/51684254 ...

  4. python SyntaxError: EOL while scanning string literal

    错误原因是,字符串以 \ 结尾 或者字符串缺少引号. 写代码拼接windows 路径出现这个错误, 查资料才知道 python中字符串不能以 \ 结尾 我的代码如下 import os dirname ...

  5. SVN 代码托管

    1.安装服务 使用yum安装subversion,简单.不繁琐. 1 yum install -y subversion 2.创建版本库 1 2       mkidr /svn/obj        ...

  6. GIT团队合作探讨之四--不同工作流优缺辨析

    由于git非常强大,它可以支持非常多的协作模式,而可能正因为选择太多反而有时候对于我们如何开始开展团队协作无从下手.本文试图阐述企业团队中应用最为广泛的git 工作流,为大家理清思路,最大限度发挥gi ...

  7. easyui的解析器Parser

    平时使用easyui做框架开发时,都知道easyui的模块组件能通过属性方法或js方法来渲染,本质上是通过parser解析器来处理实现的,因为多数情况下都是自动触发完成整个页面的解析,所以没有感觉到它 ...

  8. C++数组怎么复制

    C++数组怎么复制: #include <string.h>main(){int a[10]={34,56,4,10,77,51,93,30,5,52};int b[10];memcpy( ...

  9. 使用webBrowser下载文件

    如果直接用webBrowser.Navigate("http://***.com/");会弹出文件下载的对话框. 而如果用webclient.UploadData()下载,对方网站 ...

  10. February 14 2017 Week 7 Tuesday

    Love lives in cottages as well as in courts. 爱情无贵贱,贫富皆有之. Many people, especially boys, complain tha ...