一般情況下我們建立的表對應一組儲存檔案,使用myisam儲存引擎時是乙個.myi和.myd檔案,使用innodb儲存引擎時是乙個.ibd和.frm(表結構)檔案。
當資料量較大時(一般千萬條記錄級別以上),mysql的效能就會開始下降,這時我們就需要將資料分散到多組儲存檔案,保證其單個檔案的執行效率。
相同的輸入得到相同的輸出。輸出的結果跟輸入是否具有規律無關。僅適用於整型字段
如下將id的雜湊值對10取模將資料均勻分散到10個.ibd儲存檔案中:
create table article(
id int auto_increment primary key,
title varchar(64),
content text
)partition by hash(id) partitions 10
和hash(field)的性質一樣,只不過key是處理字串的,比hash()多了一步從字串中計算出乙個整型在做取模操作。
create table article_key(
id int auto_increment,
title varchar(64),
content text,
primary key (id,title) -- 要求分割槽依據字段必須是主鍵的一部分
)partition by key(title) partitions 10
是一種條件分割槽演算法,按照資料大小範圍分割槽(將資料使用某種條件,分散到不同的分割槽中)。
create table article_range(
id int auto_increment,
title varchar(64),
content text,
created_time int, -- 發布時間到1970-1-1的毫秒數
primary key (id,created_time) -- 要求分割槽依據字段必須是主鍵的一部分
注意:條件運算子只能使用less than,這以為著較小的範圍要放在前面,比如上述p201808,p201819,p201810分割槽的定義順序依照created_time數值範圍從小到大,不能顛倒。
也是一種條件分割槽,按照列表值分割槽(in (值列表))。
create table article_list(
id int auto_increment,
title varchar(64),
content text,
status tinyint(1), -- 文章狀態:0-草稿,1-完成但未發布,2-已發布
primary key (id,status) -- 要求分割槽依據字段必須是主鍵的一部分
)charset=utf8
partition by list(status)
( partition writing values in(0,1), -- 未發布的放在乙個分割槽
partition published values in
(2) -- 已發布的放在乙個分割槽
);
insert into article_list values(null,'mysql優化','內容示例',0)
刪除分割槽
alter table article_range drop partition p201808
注意:刪除分割槽後,分割槽中原有的資料也會隨之刪除!
新增分割槽:
銷毀分割槽:
alter table article_key coalesce partition 6
key/hash分割槽的管理不會刪除資料,但是每一次調整(新增或銷毀分割槽)都會將所有的資料重寫分配到新的分割槽上。效率極低,最好在設計階段就考慮好分割槽策略。
當資料表中的資料量很大時,分割槽帶來的效率提公升才會顯現出來。
只有檢索欄位為分割槽欄位時,分割槽帶來的效率提公升才會比較明顯。因此,分割槽欄位的選擇很重要,並且業務邏輯要盡可能地根據分割槽欄位做相應調整(盡量使用分割槽字段作為查詢條件)。
mysql分割槽邊 mysql分割槽
檢視資料庫版本是否支援分割槽 分割槽的四種型別 range分割槽 範圍分割槽,根據某個欄位的值來進行分割槽,某個連續的區間來進行區分 建立表時分區create table teacher id varchar 20 not null name varchar 20 age varchar 20 bi...
MySQL 分割槽key MySQL KEY分割槽
介紹 key分割槽和hash分割槽相似,但是key分割槽支援除text和blob之外的所有資料型別的分割槽,而hash分割槽只支援數字分割槽,key分割槽不允許使用使用者自定義的表示式進行分割槽,key分割槽使用系統提供的hash函式進行分割槽。當表中存在主鍵或者唯一鍵時,如果建立key分割槽時沒有...
mysql 分割槽管理 mysql分割槽管理
一 如何管理range和list分割槽 以該分割槽表為例 create table members id int,fname varchar 25 lname varchar 25 dob date partition by range year dob partition p0 values le...