您好,登錄后才能下訂單哦!
數據庫越來越大,單個表中數據過多,查詢讀寫,還有鎖機制,會導致嚴重的數據庫性能影響.
表鎖,行鎖,都是為了保證數據的完整性,
分表
分表是把一個大表,分成若干個獨立儲存空間的表,每個表都對應MYD數據文件,MYI索引文件,FRM表結構文件,這些表可以分布在一個存儲設備,也可以分在不同存儲設備.
相當于一個表變為多個表,如果這時候有APP已經在使用中,而且會對原表進行操作等等,需要開發修改代碼,因為原來的一個表已經分成好幾個,按照原來的表肯定是搜索不到的.
將單表拆分,再根據一定算法,就可以將數據分散到多個表中,對數據量大的數據庫,會有明顯的提升,
減少數據庫負擔,縮短查詢時間,這是分表的主要目的
mysql分表-分為垂直切分,和水平切分.
垂直切分是按照列切分,水平就是行切分(需求不同自行挑選)
垂直切分
一般垂直切分都是把經常查詢的列單獨分到一張表中,方便查詢
水平拆分
表的數據非常龐大,可以分成多個表,提高查詢效率
--------------------------------------------------------------------------------------------------------
分表的幾種方式
1-mysql集群
這個不是分表但是也是相同的作用,任務分擔到多臺mysql數據庫
2-預先估計表的訪問量,提前分為若干表,以防萬一
根據一定算法,將數據分散到不同表中.
3-利用merge存儲引擎來分表
merge只能用在myisam上進行分表.
merge分為主表跟子表,主表中是子表的位置,如果使用myisam來分表的話APP可以不需要修改連接數據的信息,還是可以直接從主表中查詢.
做一個merge的實例
create database gao;
use gao;
create table gao(
id bigint auto_increment primary key,
name varchar(20),
sex tinyint not null default '0')
engine=myisam default charset=utf8 auto_increment=1;
批量加入數據
insert into gao(name,sex) values('gao',1);
insert into gao(name,sex)select name,sex from gao; 將查詢到的數據插入,所以,數據都一樣只是測驗用
開始進行分表,首先創建兩個子表
use gao;
drop table if exists gao_1;
create table gao_1(
id bingint primary key,
name varchar(20)
sex tinyint not null default '0')
engine=myisam default charset=utf8;
因為第二個表跟上面的一模一樣除了名字
create table gao_2 like gao_1;
創建主表
drop table if exists mastergao;
create table mastergao(
id bigint primary key auto_increment ,
name varchar(20),
sex tinyint not null default '0')
engine=mergeunion=(gao_1,gao_2) insert_method=last charset=utf8 auto_increment=1;
insert_method = last 表示茶如道最后一張表 first 表示插入到第一張表
數據導入到兩個子表當中.
insert into gao_1(id,name,sex) select id,name,sex from gao where id%2=1;
insert into gao_2(id,name,sex) select id,name,sex from gao where id%2=0;
id%2后的值單雙導入到兩個表中
這時候查詢兩個表跟主表,數據都有了就可以刪除原來的gao將mastergao更改為gao即可.
alter table mastergao rename gao;完成
--------------------------------------------------------------------------------------------------------------
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。