我是靠谱客的博主 明理发卡,最近开发中收集的这篇文章主要介绍mysql存储引擎MRG_MYISAM,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Mrg_Myisam

Merge存储引擎,是一组MyIsam的组合,也就是说,他将MyIsam引擎的多个表聚合起来,但是他的内部没有数据,真正的数据依然是MyIsam引擎的表中,但是可以直接进行查询、删除更新等操作。

可以直接从数据表里面操作, 也可以直接在mrg表里面,  删除mrg表, 不会影响实际表的数据。

 

测试sql

CREATE TABLE `test_engin_mrg_1` (
  `c_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `c_uid` int(11) unsigned NOT NULL COMMENT 'uidID',
  `c_name` varchar(64) NOT NULL COMMENT '姓名',
  `c_age` tinyint(3) DEFAULT NULL COMMENT '年龄',
  `c_email` varchar(64)  DEFAULT '0' COMMENT '邮箱',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '插入时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`c_id`),
   KEY `idx_uid` (`c_uid`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='测试mrg_myisam1';



CREATE TABLE `test_engin_mrg_2` (
  `c_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `c_uid` int(11) unsigned NOT NULL COMMENT 'uidID',
  `c_name` varchar(64) NOT NULL COMMENT '姓名',
  `c_age` tinyint(3) DEFAULT NULL COMMENT '年龄',
  `c_email` varchar(64)  DEFAULT '0' COMMENT '邮箱',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '插入时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`c_id`),
   KEY `idx_uid` (`c_uid`) USING BTREE
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='测试mrg_myisam2';



CREATE TABLE `test_engin_mrg_u`  (
  `c_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `c_uid` int(11) unsigned NOT NULL COMMENT 'uidID',
  `c_name` varchar(64) NOT NULL COMMENT '姓名',
  `c_age` tinyint(3) DEFAULT NULL COMMENT '年龄',
  `c_email` varchar(64)  DEFAULT '0' COMMENT '邮箱',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '插入时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`c_id`),
   KEY `idx_uid` (`c_uid`) USING BTREE
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=LAST UNION=(`test_engin_mrg_1`,`test_engin_mrg_2`) COMMENT='测试 test_engin_mrg_u';


SELECT * FROM test_engin_mrg_u;
SELECT * FROM test_engin_mrg_1;
SELECT * FROM test_engin_mrg_2;

INSERT INTO test_engin_mrg_1(c_uid,c_name) VALUES(11,'name11'),(12,'name12');
INSERT INTO test_engin_mrg_2(c_uid,c_name) VALUES(11,'name11'),(12,'name12');
INSERT INTO test_engin_mrg_u(c_uid,c_name) VALUES(11,'name11'),(12,'name12');


DROP TABLE test_engin_mrg_u; 
-- 不会对底层存储表产生影响
-- 重新建表依然可以使用mrg

 

存储是基于 MyISAM的引擎的表, 对于业务可以拆分,多读多写,少更新的场景, 可以采用MRG_MyISAM实现数据库的简单分片。

但是基于MRG_MyISAM的存储会有如下问题

1. 未指明 实际存储表的大查询, 会有更多的merge操作,并且不走索引, 建议使用union all 代替

2. 多表引起的 id 一致问题, 自增主键引起冲突

 

最后

以上就是明理发卡为你收集整理的mysql存储引擎MRG_MYISAM的全部内容,希望文章能够帮你解决mysql存储引擎MRG_MYISAM所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部