MySQL 分區介紹總結


介紹

     分區是指根據一定的規則將一個大表分解成多個更小的部分,這里的規則一般就是利用分區規則將表進行水平切分;邏輯上沒有發生變化但實際上表已經被拆分成了多個物理對象,每個分成被划分成了一個獨立的對象。相對於沒有分區的當個表而言分區的表有很多的優勢包括: 並發統計查詢、快速歸檔刪除分區數據、分散存儲、查詢性能更佳。

mysql5.7以后查詢語句支持指定分區例如:“ SELECT * FROM t PARTITION (p0,p1) WHERE c < 5 ”指定分區同樣適用DELETEINSERTREPLACEUPDATE, and LOAD DATALOAD XML.

數據庫版本:mysql5.7.12

 

是否支持分區

SHOW PLUGINS ;

查詢partition的的狀態是active就代表支持分區,如果是源碼安裝的話在編譯的過程中要添加“-DWITH_PARTITION_STORAGE_ENGINE=1 \”。

注意: MERGECSV, or FEDERATED存儲引擎不支持分區,同一個表所有的分區必須使用相同的存儲引擎,不能分區1使用MYISAM分區2又使用INNODB;不同的分區表可以是不同的存儲引擎。

分區介紹

目前mysql可用的分區類型主要有以下幾種:

RANGE分區:基於一個給定的連續區間范圍,RANGE主要是基於整數的分區,對於非整形的字段需要利用表達式將其轉換成整形。

LIST分區:是基於列出的枚舉值列表進行分區。

COLUMNS分區:可以無需通過表達式進行轉換直接對非整形字段進行分區,同時COLUMNS分區還支持多個字段組合分區,只有RANGELIST存在COLUMNS分區,COLUMNS是RANGE和LIST分區的升級。

HASH分區:基於給定的分區個數,將數據分配到不同的分區,HASH分區只能針對整數進行HASH,對於非整形的字段只能通過表達式將其轉換成整數。

KEY分區:支持除text和BLOB之外的所有數據類型的分區,key分區可以直接基於字段做分區無需轉換成整數。

 

說明

1.注意分區名的大小寫敏感問題,和關鍵字問題。

2.無論哪種分區類型,要么分區表中沒有主鍵或唯一鍵,要么主鍵或唯一鍵包含在分區列里面,對於存在主鍵或者唯一鍵的表不能使用主鍵或者唯一鍵之外的字段作為分區字段。

3.5.7以前的版本顯示分區的執行計划使用:explain PARTITIONS;5.7以后直接執行:explain

4.沒有強制要求分區列非空,建議分區的列為NOT NULL的列;在RANGE 分區中如果往分區列中插入NULL值會被當作最小的值來處理,在LIST分區中NULL值必須在枚舉列表中否則插入失敗,在HASH/KEY分區中NULL值會被當作0來處理。

5.基於時間類型的字段的轉換函數mysql提供了"YEAR(),MONTH(),DAY(),TO_DAYS(),TO_SECONDS(),WEEKDAY(),DAYOFYEAR()"

6.拆分合並分區后會導致修改的分區的統計信息失效,沒有修改的分區的統計信息還在,不影響新插入的值加入到統計信息;這時需要對表執行Analyze操作.

7.針對非整形字段進行RANG\LIST分區建議使用COLUMNS分區。

 

刪除增加分區

在每個分區內容介紹中詳細介紹了每種分區的用法,但是都是介紹在創建表的時候創建分區和修改刪除分區單個,也可以在一張已經存在的表中加入分區,可以一次性刪除整個表的分區。

1.移除表的分區

ALTER TABLE tablename
REMOVE PARTITIONING ;

注意:使用remove移除分區是僅僅移除分區的定義,並不會刪除數據和drop PARTITION不一樣,后者會連同數據一起刪除

2.對已經存在記錄的表創建分區,以增加range分區為例,和創建表建分區的語法一樣。

ALTER TABLE `tb_partition`.`tb_varchar` 
PARTITION BY RANGE(id) PARTITIONS 3( PARTITION part0 VALUES LESS THAN (5000),  PARTITION part1 VALUES LESS THAN (10000),  PARTITION part2 VALUES LESS THAN (MAXVALUE)) ;

注意:對已有的表創建分區之后,數據會按照分區的定義分布到各個分區文件當中

 

分區系列文章: 

RANGE分區:http://www.cnblogs.com/chenmh/p/5627912.html

LIST分區:http://www.cnblogs.com/chenmh/p/5643174.html

COLUMN分區:http://www.cnblogs.com/chenmh/p/5630834.html

HASH分區:http://www.cnblogs.com/chenmh/p/5644496.html

KEY分區:http://www.cnblogs.com/chenmh/p/5647210.html

子分區:http://www.cnblogs.com/chenmh/p/5649447.html

指定各分區路徑:http://www.cnblogs.com/chenmh/p/5644713.html

分區建索引:http://www.cnblogs.com/chenmh/p/5761995.html

分區介紹總結:http://www.cnblogs.com/chenmh/p/5623474.html

總結

具體的每個分區的詳細介紹參考接下來的各分區詳解。 一個表只能存在一種分區形式,如果對一張表創建多個分區后一個分區會替換掉前一個分區。 

 

 

備注:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站點所有隨筆都是原創,歡迎大家轉載;但轉載時必須注明文章來源,且在文章開頭明顯處給明鏈接。

《歡迎交流討論》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM