舉個列子利用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 < 2000000;
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 < 4000000 and 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 < 6000000 and 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 < 8000000 and 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 < 10000000 and 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 < 12000000 and 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 < 14000000 and 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 < 16000000 and 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 選項的值)自己測試進入的是最後乙個
應用程式** 不需要改變
mysql 分表分割槽
一 分表 1 垂直分割 就是將乙個表按照欄位來分,每張表保證有相同的主鍵就好。一般來說,將常用字段和大字段分表來放。優勢 比沒有分表來說,提高了查詢速度,降低了查詢結果所用記憶體 劣勢 沒有解決大量記錄的問題,對於單錶來說隨著記錄增多,效能還是下降很快 2 水平分割 水平分割是企業最常用到的,水平拆...
mysql分表與分割槽
1 首先得確認mysql是否支援分割槽功能,這可以通過命令 show plugins 檢視如果顯示如下,則說明你的mysql版本支援partition 2 innodb一般用於具有事務和外來鍵的場合,它預設將所有的表資料和索引檔案放在乙個名為ibdata1的檔案中,屬於共享表空間。myisam預設每...
MySQL分割槽和分表
1.分割槽的型別 1 range 把連續區間按範圍劃分 例 create table user id int 11 money int 11 unsigned not null,date datetime partition by range year date partition p2014 va...