MySql分割槽演算法

2021-10-10 23:09:46 字數 2976 閱讀 7965

一般情況下我們建立的表對應一組儲存檔案,使用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...