mysql的merge存储引擎应用
来源:互联网 发布:联通网络整合营销包括 编辑:程序博客网 时间:2024/06/05 16:16
数据库中的数据量不一定是可控的,在未进行分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,CURD的开销也会越来越大;另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。所以为了减小数据库的负担,缩短查询时间,常常需要对数据表进行分表的操作。常用的分表技术有两种:
第一种的思路是,预估一下可能的数据量,比如事先建100个这样的表,user_00,user_01,user_02……….user_98,user_99。然后根据用户的ID来判断这个用户的信息放到哪张表里面,你可以用hash的方式来获得,可以用求余的方式来获得,方法很多,各人想各人的吧。
第二种是,我们发现一个表数据量已经很大了,决定对它进行分表。假如我有一张用户表user,有100W条数据,现在要拆成二张表user1和user2,每张表50W条数据,
INSERT INTO user1(user1.id,user1.name,user1.sex)SELECT (user.id,user.name,user.sex)FROM user where user.id <= 500000
INSERT INTO user2(user2.id,user2.name,user2.sex)SELECT (user.id,user.name,user.sex)FROM user where user.id > 500000.
这样我就成功的将一张user表,分成了二个表,这个时候有一个问题,代码中的sql语句怎么办,以前是一张表,现在变成二张表了,代码改动很大,这样给程序员带来了很大的工作量,有没有好的办法解决这一点呢?办法是把以前的user表备份一下,然后删除掉,重新建一张user表,把这张user表的存储引擎设置为merge。
下面举例说说具体步骤:
创建user1,user2表:
CREATE TABLE `user1` ( `id` int(10) unsigned NOT NULL, `name` VARCHAR(50) NOT NULL, `sex` TINYINT(10) unsigned NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;CREATE TABLE user2 LIKE user1;
插入测试数据:
INSERT INTO `user1` (`name`, `sex`) VALUES('张三', 0);INSERT INTO `user2` (`name`, `sex`) VALUES('李四', 1);
创建合并表:
CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL, `name` VARCHAR(50) NOT NULL, `sex` TINYINT(1) unsigned NOT NULL, PRIMARY KEY (`id`)) ENGINE=MERGE DEFAULT CHARSET=utf8 union=(user1,user2) insert_method=last;
查询一下:
SELECT * FROM users;
这里需要注意:创建的合并表结构需要和分表保持完全一致,不然可能会出现问题。
比如,笔者就遇到过如下问题,
Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
首先排除一下是否有以下问题,
1、查看是不是有一些表不是MYISAM引擎的表,因为MERGE引擎只适用于MYISAM表
2、查看是不是在union的表中含有不存在的表。
3、查看是不是MERGE的时候引用了不在同一个库的表,并且该表没有指定数据库名字。
4、比较各个表的结构(索引、引擎、列、字符集等)是否一致。
如果没有以上问题,可以尝试这样创建users表,先创建,再修改。
create users like user1;alter table users engine=merge union=(user1,user2) insert_method=last;
参考文章:
(1)、https://stackoverflow.com/questions/30879033/error-1168-hy000-mysql-merge-does-not-work
(2)、http://blog.51yip.com/mysql/949.html
(3)、http://blog.chinaunix.net/uid-20639775-id-3487060.html
- mysql的merge存储引擎应用
- MYSQL的MERGE存储引擎
- mysql的MERGE存储引擎
- Mysql Merge存储引擎
- MySQL Merge存储引擎
- MYSQL MERGE 存储引擎
- MySQL- 存储引擎 MERGE 的介绍
- MYSQL的MERGE存储引擎测试
- MySQL-MERGE存储引擎的使用测试
- Mysql的存储引擎之:MERGE存储引擎
- MySQL MERGE存储引擎 简介
- MySQL MERGE存储引擎 简介
- MySQL MERGE存储引擎 简介
- MySQL MERGE存储引擎 简
- MYSQL之 1)临时表的应用场景 2)分表后的merge存储引擎查询应用场景
- 关于mysql的MERGE存储引擎简单例子
- Mysql的Merge存储引擎实现分表查询
- Mysql的Merge存储引擎实现分表查询
- 关于std::bind绑定栈变量对象的思考
- 关于 ioctl 详细信息
- 使用 poi 根据 word 模板生成 word 文件
- Angular4.x 引入第三方 JS
- 适用于STL泛型的归并(合并排序)排序算法设计
- mysql的merge存储引擎应用
- Glide 4.0源码分析(1)
- 排序算法---直接插入排序
- 构造排序二叉树,并按行从左到右输出
- MATLAB绘图
- 1
- linux部署web项目到tomcat下(图文详解)
- 数据结构与算法之栈
- SiteSucker使用记录