Mysql数据库分表实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LYTIT/article/details/88957228

本次主要采用MERGE分表法、对表进行水平拆分;
第一步:创建数据库
DROP TABLE IF EXISTS students;
CREATE TABLE students (
id bigint(20) NOT NULL AUTO_INCREMENT,
name varchar(20) DEFAULT NULL,
num varchar(20) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

第二步:添加数据
insert into students(name,num) values(‘steven’,‘0001’);

第三步:执行数据,蠕虫插入法
重复几次增加数据就到百万级
insert into students(name,num) select name,num from students

第四步:建立子表
根据自己的业务需求创建表的数量,举例:
DROP TABLE IF EXISTS students_01;
CREATE TABLE students_01 (
id bigint(20) NOT NULL AUTO_INCREMENT,
name varchar(20) DEFAULT NULL,
num varchar(20) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS students_02;
CREATE TABLE students_02 (
id bigint(20) NOT NULL AUTO_INCREMENT,
name varchar(20) DEFAULT NULL,
num varchar(20) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

第五步:创建虚拟主表
作为students_01、students_02表的关系表,数据存储在students_01、students_02上
DROP table IF EXISTS tb_students;
create table tb_students(
idbigint(20) NOT NULL AUTO_INCREMENT,namevarchar(20) DEFAULT NULL,numvarchar(20) DEFAULT NULL, PRIMARY KEY (id`)
)ENGINE=MERGE UNION=(students_01,students_02) INSERT_METHOD=LAST CHARSET=utf8 AUTO_INCREMENT=1;
注:可能出现问题:
1、检查字段是否相同
2、检查子表类型是否为ENGINE=MyISAM

第六步:把主表的数据分拆到子表中
insert into students_01(name,num) select name,num from students where id%2=0;
insert into students_02(name,num) select name,num from students where id%2<>0;

最后完成以上步骤之后,分表完成;
增加数据:insert into tb_students(name,num) values(‘steven’,‘0001’);
查询数据:select * from tb_students
分表之后可以根据当前业务找到指定分区进行查询,可以快速定位找到数据,防止数据过多导致查询变慢、提高查询效率。

参考地址:
https://www.cnblogs.com/lucky-man/p/6207873.html

以上是实践所得,不足之处还请留言指出,相互学习,共同进步~

猜你喜欢

转载自blog.csdn.net/LYTIT/article/details/88957228