您好,欢迎访问一九零五行业门户网

mysql 分表分区小记(二)_MySQL

举个列子利用merge存储引擎来实现分表
数据表1450w数据进行八张表拆分  花费时间大概6分钟左右
1.创建八张分表 systemlog1,systemlog2,systemlog3,systemlog4...
2.把数据根据主键范围塞入分表中
insert into systemlog1(systemlog1.slid,systemlog1.code,systemlog1.aid,systemlog1.adid,systemlog1.ctime,systemlog1.nip,systemlog1.cityname,systemlog1.username) select systemlog.slid,systemlog.code,systemlog.aid,systemlog.adid,systemlog.ctime,systemlog.nip,systemlog.cityname,systemlog.username from systemlog where systemlog.slid insert into systemlog2(systemlog2.slid,systemlog2.code,systemlog2.aid,systemlog2.adid,systemlog2.ctime,systemlog2.nip,systemlog2.cityname,systemlog2.username) select systemlog.slid,systemlog.code,systemlog.aid,systemlog.adid,systemlog.ctime,systemlog.nip,systemlog.cityname,systemlog.username from systemlog where systemlog.slid =2000000;
insert into systemlog3(systemlog3.slid,systemlog3.code,systemlog3.aid,systemlog3.adid,systemlog3.ctime,systemlog3.nip,systemlog3.cityname,systemlog3.username) select systemlog.slid,systemlog.code,systemlog.aid,systemlog.adid,systemlog.ctime,systemlog.nip,systemlog.cityname,systemlog.username from systemlog where systemlog.slid =4000000;
insert into systemlog4(systemlog4.slid,systemlog4.code,systemlog4.aid,systemlog4.adid,systemlog4.ctime,systemlog4.nip,systemlog4.cityname,systemlog4.username) select systemlog.slid,systemlog.code,systemlog.aid,systemlog.adid,systemlog.ctime,systemlog.nip,systemlog.cityname,systemlog.username from systemlog where systemlog.slid =6000000;
insert into systemlog5(systemlog5.slid,systemlog5.code,systemlog5.aid,systemlog5.adid,systemlog5.ctime,systemlog5.nip,systemlog5.cityname,systemlog5.username) select systemlog.slid,systemlog.code,systemlog.aid,systemlog.adid,systemlog.ctime,systemlog.nip,systemlog.cityname,systemlog.username from systemlog where systemlog.slid =8000000;
insert into systemlog6(systemlog6.slid,systemlog6.code,systemlog6.aid,systemlog6.adid,systemlog6.ctime,systemlog6.nip,systemlog6.cityname,systemlog6.username) select systemlog.slid,systemlog.code,systemlog.aid,systemlog.adid,systemlog.ctime,systemlog.nip,systemlog.cityname,systemlog.username from systemlog where systemlog.slid =10000000;
insert into systemlog7(systemlog7.slid,systemlog7.code,systemlog7.aid,systemlog7.adid,systemlog7.ctime,systemlog7.nip,systemlog7.cityname,systemlog7.username) select systemlog.slid,systemlog.code,systemlog.aid,systemlog.adid,systemlog.ctime,systemlog.nip,systemlog.cityname,systemlog.username from systemlog where systemlog.slid =12000000;
insert into systemlog8(systemlog8.slid,systemlog8.code,systemlog8.aid,systemlog8.adid,systemlog8.ctime,systemlog8.nip,systemlog8.cityname,systemlog8.username) select systemlog.slid,systemlog.code,systemlog.aid,systemlog.adid,systemlog.ctime,systemlog.nip,systemlog.cityname,systemlog.username from systemlog where systemlog.slid =14000000;
注意:以下很关键
3.原表进行重命名进行数据备份,再重新创建一张空表systemlog 
create table if not exists `systemlog` (
   `slid` int(11) not null auto_increment,
   `code` smallint(6) not null,
   `aid` int(11) not null default '0',
   `adid` int(11) not null default '0',
   `ctime` timestamp not null default '0000-00-00 00:00:00',
   `nip` varchar(20) default null,
   `cityname` varchar(8000) default null,
   `username` varchar(50) default null,
   primary key (`slid`),
   key `aid` (`aid`),
   key `ctime` (`ctime`),
   key `adid` (`adid`)
 ) type=merge union=(systemlog1,systemlog2,systemlog3,systemlog4,systemlog5,systemlog6,systemlog7,systemlog8) insert_method=last auto_increment=1 default charset=utf8
4.test
每次更新 修改 删除 systemlog 相应的mysql会引导去分表动作
每次新增的话是数据进入第一个或者最后一个 myisam 表(取决于 insert_method 选项的值)自己测试进入的是最后一个
应用程序代码 不需要改变
其它类似信息

推荐信息