使用Merge存储引擎实现 mysql分表
2016-02-15 14:26
537 查看
分表就是把N条记录的表,分成若干个分表,各个分表记录的总和仍为N。
分表的方法有很多,用merge来分表,是最简单的一种方式.
Merge表的优点:
A: 分离静态的和动态的数据
B:利用结构接近的的数据来优化查询
C: 查询时可以访问更少的数据
D:更容易维护大数据集
E: 可以通过修改.mrg文件来修改Merge表,当然也可以用alter进行修改,修改后要通过FLUSH TABLES刷新表缓存,此法可以动态增加减少子表
merge是mysql的一种存储引擎,它把一组MyISAM数据表当做一个逻辑单元.
CREATE TABLE t1 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20))engine=myisam ;
CREATE TABLE t2 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20))engine=myisam ;
CREATE TABLE total (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20)) ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;
即创建表的语句制定引擎即可:engine=myisam
另外,创建分表也可以用like,如:CREATETABLEt2liket1;
对应定期分表的情况下,只要定期相应的增加一个基础表,再修改merge表中的union就行了(ALTERTABLEtbl_nameUNION=(...))。
如在增加一个表(需和其他基础表一样的结构):
CREATE TABLE t3(a INT NOT NULL AUTO_INCREMENT PRIMARYKEY,message CHAR(20));
ALTER TABLE total UNION=(t1,t2,t3)
INSERT_METHOD=LAST;表示插入的方法,INSERT_METHOD的值可以是FIRST(插入第一个表),LAST(最后一个表),NO(不能插入)
查询的时候,和平常一样
select*fromtotalwhere....
merge表会自动找到相应的基础表进行查询。
需要注意的是merge表并不维护“唯一性”检查,唯一性有各基础表完成。所以插入新的记录时候可能和其他基础表的内容重复。所以再插入去需要用代码进行唯一性检查。
不能直接删除一个分表,这样会破坏merge表。正确的方法是:
alter table t ENGINE=MRG_MyISAM UNION=(t1) INSERT_METHOD=LAST;
drop table t1
分表的方法有很多,用merge来分表,是最简单的一种方式.
Merge表的优点:
A: 分离静态的和动态的数据
B:利用结构接近的的数据来优化查询
C: 查询时可以访问更少的数据
D:更容易维护大数据集
E: 可以通过修改.mrg文件来修改Merge表,当然也可以用alter进行修改,修改后要通过FLUSH TABLES刷新表缓存,此法可以动态增加减少子表
merge是mysql的一种存储引擎,它把一组MyISAM数据表当做一个逻辑单元.
CREATE TABLE t1 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20))engine=myisam ;
CREATE TABLE t2 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20))engine=myisam ;
CREATE TABLE total (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20)) ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;
即创建表的语句制定引擎即可:engine=myisam
另外,创建分表也可以用like,如:CREATETABLEt2liket1;
对应定期分表的情况下,只要定期相应的增加一个基础表,再修改merge表中的union就行了(ALTERTABLEtbl_nameUNION=(...))。
如在增加一个表(需和其他基础表一样的结构):
CREATE TABLE t3(a INT NOT NULL AUTO_INCREMENT PRIMARYKEY,message CHAR(20));
ALTER TABLE total UNION=(t1,t2,t3)
INSERT_METHOD=LAST;表示插入的方法,INSERT_METHOD的值可以是FIRST(插入第一个表),LAST(最后一个表),NO(不能插入)
查询的时候,和平常一样
select*fromtotalwhere....
merge表会自动找到相应的基础表进行查询。
需要注意的是merge表并不维护“唯一性”检查,唯一性有各基础表完成。所以插入新的记录时候可能和其他基础表的内容重复。所以再插入去需要用代码进行唯一性检查。
不能直接删除一个分表,这样会破坏merge表。正确的方法是:
alter table t ENGINE=MRG_MyISAM UNION=(t1) INSERT_METHOD=LAST;
drop table t1
相关文章推荐
- mysql 查看数据库文件存放地址语句
- mysql使用ROW_COUNT()返回插入、更新、删除操作影响行数
- mysql 错误集锦
- MySQL存储过程中的3种循环
- mysql分表和表分区详解
- mysql 数据库导入 导出,解决 导入 错误问题
- 2013 Lost connection to MySQL server at 'handshake: reading initial communication packet'
- 基于mysql体系结构的深入解析
- mysql数据库1129错误
- 两个Mysql数据库主从库单向同步
- 如何选择MySQL存储引擎
- mysql表名忽略大小写 未生效
- 修改mysql的默认存储引擎
- MySQL 版本号说明及查看方法
- 京东商城某重要系统MySQL注射(附验证脚本)
- 360某站点MySQL注射(附验证脚本)
- MySQL存储引擎
- Mysql 行列转换
- 自动删除Mysql备份(数组+for)
- mysql服务启动慢甚至无法启动问题