MySQL分區的概念分類用法


分區有range 分區、list 分區、hash 分區、key 分區。

分區的限制:
1.主鍵/唯一鍵必須包含分區鍵,且沒有列前要求
2.分區名不區分大小寫 /*一般情況下由於MySQL數據庫和表對應系統中的文件和目錄,所以大小寫敏感問題取決於系統*/


range 分區:基於一個給定的連續範圍進行分區
range分區的限制:
1.區間連續且不能重疊
2.range分區要求分區鍵是整數類型,如果需要使用其他類型,需要使用range columns分區,否則只能使用函數處理轉化爲整型


用法:
CREATE TABLE `t` (
  `id` int(11) NOT NULL,
  `ttime` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
 PARTITION BY RANGE  COLUMNS(ttime)
(PARTITION p0 VALUES LESS THAN ('2017-01-01') ENGINE = InnoDB,
 PARTITION p1 VALUES LESS THAN ('2017-02-01') ENGINE = InnoDB,
 PARTITION p2 VALUES LESS THAN maxvalues ENGINE = InnoDB) ;
(maxvalues 表示最大的可能的整數值)


range 分區的應用場景:
1.需要刪除過期的數據時,alter table t drop partition p0。(效率比delete快)
2.運行包括分區鍵的範圍查詢。(可以快速確定要查詢的分區,掃描少量分區即可得到查詢結果)




list 分區:基於枚舉出的值列表分區
list 分區的限制:
1.list分區要求分區鍵是整數類型,如果需要使用其他類型可以使用list columns分區


用法:
 CREATE TABLE `t` (
  `id` int(11) NOT NULL,
  `name` varchar(20) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
 PARTITION BY LIST (id)
(PARTITION p0 VALUES IN (1,3,10) ENGINE = InnoDB,
 PARTITION p1 VALUES IN (2,5,12) ENGINE = InnoDB,
 PARTITION p2 VALUES IN (9,6,4) ENGINE = InnoDB) ;




查看分區情況:(查看information_schema.partitions表)
mysql> select partition_name,partition_expression,partition_description from partitions where table_name='t';
+----------------+----------------------+-----------------------+
| partition_name | partition_expression | partition_description |
+----------------+----------------------+-----------------------+
| p0             | `name`               | '1q','3a','4l'        |
| p1             | `name`               | 'a2','5','6'          |
+----------------+----------------------+-----------------------+
2 rows in set (0.00 sec)




hash 分區:基於給定的分區的數目,將數據分佈到不同的分區
hash分區根據分配的算法的不一樣分爲常規hash分區和線性hash分區
hash分區的限制:只支持分區鍵爲整數的分區
hash 分區應用場景:用來分散熱點讀,使數據在預先設置的幾個分區儘量平均分佈


語法:
CREATE TABLE `t` (
  `id` int(11) NOT NULL,
  `name` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
 PARTITION BY HASH (id)
 PARTITIONS 3 ;




key 分區:類似hash分區,但是key支持出test,blob之外的所有數據類型做分區鍵
語法:
CREATE TABLE `t` (
  `id` int(11) NOT NULL,
  `name` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
 PARTITION BY KEY (`name`)
 PARTITIONS 3 ;




複合分區:分區表中對每一個分區的再次分割。
複合分區適用於保存非常大量的數據記錄。


用法:
CREATE TABLE `t` (
  `id` int(11) NOT NULL,
  `name` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gbk
 PARTITION BY RANGE  COLUMNS(id)
SUBPARTITION BY HASH (id)
SUBPARTITIONS 2
(PARTITION p0 VALUES LESS THAN (10) ENGINE = InnoDB,
 PARTITION p1 VALUES LESS THAN (20) ENGINE = InnoDB,
 PARTITION p2 VALUES LESS THAN (MAXVALUE) ENGINE = InnoDB);


綜上,range、list都使用range column、list column來代替。


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