博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL MERGE存储引擎 简
阅读量:4071 次
发布时间:2019-05-25

本文共 1728 字,大约阅读时间需要 5 分钟。

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

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

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

[sql] 
 
  1. CREATE TABLE log_YY  
  2. (  
  3.   dt  DATETIME NOT NULL,  
  4.   info VARCHAR(100) NOT NULL,  
  5.   INDEX (dt)  
  6. ) ENGINE = MyISAM;  

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

[sql] 
 
  1. CREATE TABLE log_merge  
  2. (  
  3.     dt DATETIME NOT NULL,  
  4.     info VARCHAR(100) NOT NULL,  
  5.     INDEX(dt)  
  6. ) ENGINE = MERGE UNION = (log_2004, log_2005, log_2006, log_2007);  

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

[sql] 
 
  1. SELECT COUNT(*) FROM log_merge;  

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

[sql] 
 
  1. 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] 
 
  1. CREATE TABLE log_merge  
  2. (  
  3.     dt DATETIME NOT NULL,  
  4.     info VARCHAR(100) NOT NULL,  
  5.     INDEX(dt)  
  6. ) ENGINE = MERGE UNION = (log_2004, log_2005, log_2006, log_2007)  
  7. INSERT_METHOD = LAST;  

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

[sql] 
 
  1. log_2009:  
  2. CREATE TABLE log_2009 LIKE log_2008;  
  3. ALTER TABLE log_merge  
  4. UNION = (log_2004, log_2005, log_2006, log_2007,log_2008,log_2009);  
你可能感兴趣的文章
iOS 开发百问
查看>>
Mac环境下svn的使用
查看>>
github简单使用教程
查看>>
如何高效利用GitHub
查看>>
环境分支-git版本管理
查看>>
uni-app 全局变量
查看>>
js判断空对象的几种方法
查看>>
java 不用递归写tree
查看>>
springboot2 集成Hibernate JPA 用 声明式事物
查看>>
fhs-framework jetcache 缓存维护之自动清除缓存
查看>>
SpringBoot 动态编译 JAVA class 解决 jar in jar 的依赖问题
查看>>
fhs-framework springboot mybatis 解决表关联查询问题的关键方案-翻译服务
查看>>
ZUUL2 使用场景
查看>>
Spring AOP + Redis + 注解实现redis 分布式锁
查看>>
elastic-job 和springboot 集成干货
查看>>
php开发微服务注册到eureka中(使用sidecar)
查看>>
mybatis mybatis plus mybatis jpa hibernate spring data jpa比较
查看>>
支付宝生活号服务号 用户信息获取 oauth2 登录对接 springboot java
查看>>
CodeForces #196(Div. 2) 337D Book of Evil (树形dp)
查看>>
uva 12260 - Free Goodies (dp,贪心 | 好题)
查看>>