Mysql數據庫分表實現

本次主要採用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

以上是實踐所得,不足之處還請留言指出,相互學習,共同進步~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章