Mysql的MERGE存储引擎详解

作者:laozhang 时间:2024-01-25 22:26:49 

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
0
投稿

猜你喜欢

  • Python Pandas知识点之缺失值处理详解

    2023-09-29 20:23:16
  • python抓取网页内容示例分享

    2022-04-25 19:02:56
  • Windows2003 IIS+PHP+MySQL配置

    2007-06-15 15:15:00
  • 成为一个顶级设计师的第二准则

    2008-04-01 09:41:00
  • 让自定义文件下载支持断点续传

    2009-03-11 19:45:00
  • Python namedtuple命名元组实现过程解析

    2022-08-20 14:27:20
  • Python内置函数bin() oct()等实现进制转换

    2021-05-15 05:15:42
  • python读取csv文件指定行的2种方法详解

    2022-06-06 13:35:24
  • python中random模块详解

    2023-07-30 02:29:23
  • oracle表空间表分区详解及oracle表分区查询使用方法

    2024-01-14 19:42:14
  • pandas将DataFrame的几列数据合并成为一列

    2022-07-27 13:46:23
  • mysql 8.0.18 安装配置图文教程

    2024-01-21 09:46:33
  • Python实现XML文件解析的示例代码

    2022-02-24 11:03:43
  • Python flask-script 模块详解

    2023-03-09 06:20:20
  • SQL Server游标的使用/关闭/释放/优化小结

    2024-01-21 15:37:36
  • PHP正则表达式替换<pre>标签外的内容

    2023-05-22 10:47:12
  • 详解如何在Vue3使用<script lang=“ts“ setup>语法糖

    2024-04-27 16:00:29
  • ASP 千万级数据分页的存储过程

    2011-04-14 11:08:00
  • Python线程指南分享

    2023-01-13 15:33:58
  • 初学者快看,Python下划线的五个作用介绍

    2023-03-03 18:23:40
  • asp之家 网络编程 m.aspxhome.com