您好,登錄后才能下訂單哦!
本文主要給大家介紹Mysql 分區知識,文章內容都是筆者用心摘選和編輯的,具有一定的針對性,對大家的參考意義還是比較大的,下面跟筆者一起了解下Mysql 分區知識吧。
一、分區類型
1. RANGE類型(范圍分區)
通過范圍的方式進行分區, 為每個分區給出一定的范圍, 范圍必須是連續的并且不能重復, 使用VALUES LESS THAN操作符
啥意思呢? 就是range類型就是一種范圍, 比如, 從1-10, 11-20, 21-30這種的方式分區, 1-10就在一個分區里, 11-20是另外一個分區, 但是看起來他們還是同一個表 <br />
咱們看一個創建的例子
CREATE TABLE `t1` ( `id` int(11) NOT NULL, `uid` int(11) NOT NULL COMMENT '用戶id', `score` int(3) NOT NULL DEFAULT '0' COMMENT '分數', PRIMARY KEY (`id`,`score`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 PARTITION BY RANGE (score) (PARTITION p0 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION p1 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION p2 VALUES LESS THAN (30) ENGINE = InnoDB, PARTITION p3 VALUES LESS THAN (40) ENGINE = InnoDB)
創建了個t1表, 并且t1有四個分區, 第一個分區p0的范圍是小于10的, 第二個是小于20的。這就是一個range分區的例子。 <br />
那為啥主鍵定義的是雙主鍵呢? 因為分區鍵(score) 必須也是主鍵或者唯一鍵的一部分。
Range分區的詳細介紹請看Mysql 分區介紹(二) —— RANGE分區
LIST不同于RANGE分區, 每個分區必須被顯式的定義, 每個分區是根據列值的成員在一組列表中的元素定義的
這說的有點亂, 還是直接看一個創建的例子吧
create table t2 ( id int not null, uid int not null comment '用戶id', score int(3) not null default 0 comment '分數', primary key(id, uid) ) partition by list(uid) ( partition p0 values in (1,3,5,7,9), partition p1 values in (2,4,6,8,10) )
t2的分區鍵是uid, 有兩個分區(這個很明顯嘛), 如果uid in (1,3,5,7,9), 那么這條數據就會保存在p0中, 如果是2,4,6,8,10的話, 就會在p1中, 這就是LIST 分區
Range分區的詳細介紹請看Mysql 分區介紹(三) —— LIST分區
COLUMNS和以上兩種是很不一樣的, 這個是可以用多個分區鍵確定分區的。有兩種方式, RANGE COLUMNS 和 LIST COLUMNS
類似RANGE 分區, 但是可以使用一個或多個字段值定義
不太好理解... 還是看例子吧
create table t3 ( a int, b int, c char(3), d int ) PARTITION BY RANGE COLUMNS(a,d,c) ( PARTITION p0 VALUES LESS THAN (5,10,'ggg'), PARTITION p1 VALUES LESS THAN (10,20,'mmm'), PARTITION p2 VALUES LESS THAN (15,30,'sss') )
分區鍵有多個, 并且都是范圍的, 就是RANGE COLUMNS 分區
RANGE COLUMNS分區的詳細介紹請看Mysql 分區介紹(四) —— RANGE COLUMNS分區
Mysql 5.6開始支持LIST COLUMNS分區, 可以開始使用多個列作為分區的鍵, 并且列的數據類型除了數字類型可以作為分區列; 你也可以使用字符串類型, DATE和DATETIME
還是看例子吧
CREATE TABLE customers_1 ( first_name VARCHAR(25), last_name VARCHAR(25), street_1 VARCHAR(30), street_2 VARCHAR(30), city VARCHAR(15), renewal DATE ) PARTITION BY LIST COLUMNS(city) ( PARTITION pRegion_1 VALUES IN('Oskarshamn', 'H?gsby', 'M?nster?s'), PARTITION pRegion_2 VALUES IN('Vimmerby', 'Hultsfred', 'V?stervik'), PARTITION pRegion_3 VALUES IN('N?ssj?', 'Eksj?', 'Vetlanda'), PARTITION pRegion_4 VALUES IN('Uppvidinge', 'Alvesta', 'V?xjo') );
LIST COLUMNS分區的詳細介紹請看Mysql 分區介紹(五) —— LIST COLUMNS分區
使用分區鍵去確保數據可以均勻的分布在一個預先確定數字的分區上, 在hash分區中, 無需顯式的指定分區
CREATE TABLE employees ( id INT NOT NULL, fname VARCHAR(30), lname VARCHAR(30), hired DATE NOT NULL DEFAULT '1970-01-01', separated DATE NOT NULL DEFAULT '9999-12-31', job_code INT, store_id INT ) PARTITION BY HASH(store_id) PARTITIONS 4;
HASH分區的詳細介紹請看Mysql 分區介紹(六) —— HASH分區
key分區類似hash分區, 接受0個或多個列名, key分區的哈希函數由MySQL云服務器提供。NDB集群使用md5();使用其他存儲引擎的表,云服務器采用自己的內部的哈希函數是基于相同的算法password()。
CREATE TABLE k1 ( id INT NOT NULL PRIMARY KEY, name VARCHAR(20) ) PARTITION BY KEY() PARTITIONS 2;
KEY分區的詳細介紹請看Mysql 分區介紹(七) —— KEY分區
子分區也稱為復合分區, 在分區的基礎上進一步進行分區的方式
CREATE TABLE ts ( id INT, purchased DATE ) PARTITION BY RANGE( YEAR(purchased) ) SUBPARTITION BY HASH( TO_DAYS(purchased) ) SUBPARTITIONS 2 ( PARTITION p0 VALUES LESS THAN (1990), PARTITION p1 VALUES LESS THAN (2000), PARTITION p2 VALUES LESS THAN MAXVALUE );
看完以上關于Mysql 分區知識,很多讀者朋友肯定多少有一定的了解,如需獲取更多的行業知識信息 ,可以持續關注我們的行業資訊欄目的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。