MySQL使用MRG_MyISAM(MERGE)实现分表后查询的示例

 更新时间:2020年12月09日 10:18:05   作者:袁志蒙  
这篇文章主要介绍了MySQL使用MRG_MyISAM(MERGE)实现分表后查询的示例,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下

数据库大数据量优化是一门很大的学问,也是做为一名开发者需要掌握的专业技能。

MySQL分表方式分为垂直分表和水平分表,这两种分表形式都比较简单,简单理解垂直分表指的是:表的记录并不多,但是字段却很长,表占用空间很大,检索表的时候需要执行大量的IO,严重降低了性能。这时需要把大的字段拆分到另一个表,并且该表与原表是一对一的关系。而水平分表则是在同一个数据库内,把同一个表的数据按一定规则拆到多个表中,目的是优化单一表数据量过大而产生的性能问题,避免IO争抢并减少锁表的几率。

实现分表很简单,复杂的是分表之后如何查询数据?今天的实现方式是使用Mysql表引擎MRG_MyISAM(MERGE)
MERGE存储引擎,也被认识为MRG_MyISAM引擎,是一个相同的可以被当作一个来用的MyISAM表的集合。“相同”意味着所有表同样的列和索引信息。你不能合并列被以不同顺序列于其中的表,没有恰好同样列的表,或有不同顺序索引的表。而且,任何或者所有的表可以用myisampack来压缩。表选项的差异,比如AVG_ROW_LENGTH, MAX_ROWS或PACK_KEYS都不重要。

当你创建一个MERGE表之时,MySQL在磁盘上创建两个文件。文件名以表的名字开始,并且有一个扩展名来指明文件类型。一个.frm文件存储表定义,一个.MRG文件包含被当作一个来用的表的名字。这些表作为MERGE表自身,不必要在同一个数据库中。

你可以对表的集合用SELECT, DELETE, UPDATE和INSERT。你必须对你映射到一个MERGE表的这些表有SELECT, UPDATE和DELETE 的权限。

如果你DROP MERGE表,你仅在移除MERGE规格。底层表没有受影响。

当你创建一个MERGE表之时,你必须指定一个UNION=(list-of-tables)子句,它说明你要把哪些表当作一个来用。如果你想要对MERGE表的插入发生在UNION列表中的第一个或最后一个表上,你可以选择地指定一个INSERT_METHOD选项。使用FIRST或LAST值使得插入被相应地做在第一或最后一个表上。如果你没有指定INSERT_METHOD选项,或你用一个NO值指定该选项。往MERGE表插入记录的试图导致错误。

举个例子:
创建两个子分表:

CREATE TABLE `yzm_table1` (
  `id` int(10) unsigned NOT NULL,
  `title` varchar(100) NOT NULL DEFAULT '',
  `content` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `yzm_table2` (
  `id` int(10) unsigned NOT NULL,
  `title` varchar(100) NOT NULL DEFAULT '',
  `content` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

表创建完毕了,需要注意的是这里的id不能设为自增,而且所有的表结构必须一致,包括结构,类型,长度,字段的顺序都必须一致那么对于这个id如何取得呢?后面我会详细说明。现在,我们需要一个合并表,用于查询,创建合并表的代码如下:

CREATE TABLE `yzm_table` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(100) NOT NULL DEFAULT '',
  `content` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=NO INSERT_METHOD=LAST UNION=(`yzm_table1`,`yzm_table2`);

合并表也必须和前面的表有相同的结构,类型,长度,包括字段的顺序都必须一致这里的 INSERT_METHOD=NO 表示不允许对本表进行insert操作。好了,当需要查询的时候,我们可以只对yzm_table这个表进行操作就可以了,也就是说这个表仅仅只能进行select操作。

插入一些数据测试:

INSERT INTO `yzm_table1` VALUES ('1', 'table1-1', 'content1-1');
INSERT INTO `yzm_table1` VALUES ('2', 'table1-2', 'content1-2');
INSERT INTO `yzm_table2` VALUES ('3', 'table2-1', 'content2-1');
INSERT INTO `yzm_table2` VALUES ('4', 'table2-2', 'content2-2');
INSERT INTO `yzm_table2` VALUES ('5', 'table2-3', 'content2-3');

然后查询合并表(主表)

SELECT * FROM `yzm_table` LIMIT 10;

果然可以查询到所有关联子表的所有数据,这样就可以对所有的数据进行分页、统计等查询了。

以上就是MySQL使用MRG_MyISAM(MERGE)实现分表后查询的示例的详细内容,更多关于MySQL 分表后查询的资料请关注脚本之家其它相关文章!

相关文章

  • 用VirtualBox构建MySQL测试环境的笔记

    用VirtualBox构建MySQL测试环境的笔记

    这篇文章主要介绍了如何用VirtualBox构建MySQL测试环境,特分享下,方便需要的朋友
    2013-08-08
  • MySQL数据库的多种连接方式以及实用工具

    MySQL数据库的多种连接方式以及实用工具

    mysql连接操作是客户端进程与mysql数据库实例进程进行通信,下面这篇文章主要给大家介绍了关于MySQL数据库的多种连接方式以及实用工具的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • Mysql巧用join优化sql的方法详解

    Mysql巧用join优化sql的方法详解

    这篇文章主要给大家介绍了关于Mysql巧用join优化sql的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Mysql具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • 关于MySQL中Update使用方法举例

    关于MySQL中Update使用方法举例

    这篇文章主要给大家介绍了关于MySQL中Update使用方法的相关资料,更新数据是使用数据库时最重要的任务之一,在本教程中您将学习如何使用MySQL UPDATE语句来更新表中的数据,需要的朋友可以参考下
    2023-11-11
  • 一篇文章带你了解MySQL单表访问方法

    一篇文章带你了解MySQL单表访问方法

    MySQL将对数据不同的访问方式称为access method (访问方法),同一个SQL可以用不同的访问方法执行,不过不同的方法花费的成本差异也是巨大的,下面这篇文章主要给大家介绍了关于MySQL单表访问方法的相关资料,需要的朋友可以参考下
    2023-06-06
  • Mysql存在则修改不存在则新增的两种实现方法实例

    Mysql存在则修改不存在则新增的两种实现方法实例

    mysql语法支持如果数据存在则更新,不存在则插入,下面这篇文章主要给大家介绍了关于Mysql存在则修改不存在则新增的两种实现方法,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • CentOS下php使用127.0.0.1不能连接mysql的解决方法

    CentOS下php使用127.0.0.1不能连接mysql的解决方法

    这篇文章主要介绍了CentOS下php使用127.0.0.1不能连接mysql的解决方法,本文原因是SELINUX导致的连接失败,需要的朋友可以参考下
    2015-01-01
  • linux下如何使用yum源安装mysql

    linux下如何使用yum源安装mysql

    这篇文章主要介绍了linux下如何使用yum源安装mysql问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • mysql聚簇索引的页分裂原理实例分析

    mysql聚簇索引的页分裂原理实例分析

    这篇文章主要介绍了mysql聚簇索引的页分裂原理,结合实例形式分析了mysql聚簇索引的页分裂原理与操作注意事项,需要的朋友可以参考下
    2019-07-07
  • mysql滑动聚合/年初至今聚合原理与用法实例分析

    mysql滑动聚合/年初至今聚合原理与用法实例分析

    这篇文章主要介绍了mysql滑动聚合原理与用法,结合实例形式分析了mysql滑动聚合的相关功能、原理、使用方法及操作注意事项,需要的朋友可以参考下
    2019-12-12

最新评论