概述
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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复