MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询。构成一个MERGE数据表结构的各成员MyISAM数据表必须具有完全一样的结构。每一个成员数据表的数据列必须按照同样的顺序定义同样的名字和类型,索引也必须按照同样的顺序和同样的方式定义。

假设你有几个日志数据表,他们内容分别是这几年来每一年的日志记录项,他们的定义都是下面这样,YY代表年份:

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

下面这个查询用来确定在这几年里每年各有多少日志记录项:
[sql]
SELECT YEAR(dt) AS y, COUNT(*) AS entries FROM log_merge GROUP BY y;

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

[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)
INSERT_METHOD = LAST;

创建一个新的成员数据表log_2009并让他有同样的表结构,然后修改log_merge数据表把log_2009包括进来:
[sql]
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);

转自:http://blog.csdn.net/leiyonglin/article/details/7008659

最新文章

  1. three.js立方体
  2. Android(Linux)控制GPIO的方法及实时性分析
  3. android 比较完善json请求格式
  4. fio
  5. 虚拟机Ubuntu16,caffe环境搭建
  6. WAMP 403 Forbidden禁止访问 的解决办法
  7. mongodb 2.6.6 在window10下的安装
  8. RPC框架——简单高效hessian的使用方式
  9. 中颖电子AD操作
  10. AS3中释放优化的几条常识
  11. centos 安装apache activemq
  12. Java基础之接口与抽象类及多态、内部类
  13. 修改rpm中的文件重新打包
  14. 《Exception团队》第一次作业:团队亮相
  15. complex类的设计实现
  16. 二叉搜索树的第K大节点
  17. .Net圈子里的一些看法
  18. Java 日志体系
  19. eslint ":"号
  20. SpringCloud请求响应数据转换(二)

热门文章

  1. ActiveMQ-Prefetch机制和constantPendingMessageLimitStrategy
  2. python模块之xlrd,xlwt,读写execl(xls,xlsx)
  3. 报错:Cobbler check 时报错
  4. 初探Nginx架构
  5. 5.rabbitmq 主题
  6. HDU 2181 哈密顿绕行世界问题 (DFS)
  7. Hive入门学习随笔(一)
  8. laravel5.1--数据库操作
  9. Hadoop(六)MapReduce的入门与运行原理
  10. lr获取响应结果中的乱码并转成中文