通过MERGE存储引擎实现mysql分表

分表就是把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,如:CREATE TABLE t2 like t1;
对应定期分表的情况下,只要定期相应的增加一个基础表,再修改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(不能插入)

查询的时候,和平常一样

测试:

create table  t1 (a int ,b varchar(10))engine=myisam;
create table  t2 like t1;

create table total (a int ,b varchar(10)) engine=MERGE UNION=(t1,t2) insert_method=FIRST;

结果 查询total,可以查到t1 和t2两个表的实时汇总数据

原文来自:https://blog.csdn.net/rorntuck7/article/details/50668060




猜你喜欢

转载自blog.csdn.net/u014074697/article/details/79818391