mysql 分表分割槽小記 二

2021-09-12 05:54:07 字數 4056 閱讀 6622

舉個列子利用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...