本次主要採用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
以上是實踐所得,不足之處還請留言指出,相互學習,共同進步~