⼀、什麼是分區表mysql
分區表就是按⼀定規則將⼀張表分割成多個部分,達到和物理分表一樣的效果,但操做起來更簡單,不一樣於物理分表那樣使⽤時還須要指定使⽤的數據表。對於使⽤者來講和操做普通表⽆差異。sql
⼆、優點與限制數據庫
一、優點服務器
二、限制函數
3、分區類型spa
一、RANGE分區code
基於⼀個給定連續區間範圍,把數據分配到不一樣的分區。blog
CREATE TABLE r1 ( a INT, b INT ) PARTITION BY RANGE (a) ( PARTITION p0 VALUES LESS THAN (5), PARTITION p1 VALUES LESS THAN (MAXVALUE) );
二、LIST分區索引
相似RANGE分區,區別在LIST分區是基於枚舉出的值列表分區,RANGE是基於給定連續區間範 圍分區。ci
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') );
三、HASH分區
基於⽤戶定義的表達式返回值來選擇分區,該表達式對要插⼊到表的⾏中列值操做。
PS:表達式必須返回整型數據。
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;
四、KEY分區
相似HASH分區,可是HASH分區容許使⽤⽤戶⾃定義表達式,⽽KEY分區不容許,它須要使⽤ MySQL服務器提供的HASH函數,同時HASH分區只⽀持整數分區,⽽KEY分區⽀持除BLOB和 TEXT類型外其餘列。
PS:KEY分區對列數據進⾏hash運算因此有時候數據分佈會⾮常不均勻。若是不指定列,mysql會⾃動使⽤主鍵或者惟⼀健所在的列。
CREATE TABLE k1 ( id INT NOT NULL PRIMARY KEY, name VARCHAR(20) ) PARTITION BY KEY() PARTITIONS 2;