Mysql分區表使⽤

⼀、什麼是分區表mysql

分區表就是按⼀定規則將⼀張表分割成多個部分,達到和物理分表一樣的效果,但操做起來更簡單,不一樣於物理分表那樣使⽤時還須要指定使⽤的數據表。對於使⽤者來講和操做普通表⽆差異。sql

⼆、優點與限制數據庫

一、優點服務器

  • 分區能夠在⼀個表中存儲⽐單個磁盤或⽂件系統分區上的數據更多的數據,由於咱們可 以將分區表存儲在不一樣物理磁盤上;
  • 對於⼤表數據,能夠快速刪除指定分區上的數據,效率⽐普通表delete⾼不少;
  • 查詢的時候,若是where⼦句中包含分區列,則會減小IO,提高查詢效率;
  • 對於⼤表尤爲是innodb引擎的表,進⾏count()或sum()查詢時,能夠分區並⾏查詢,提⾼效率。

二、限制函數

  • 若是分區字段中有主鍵或者惟⼀索引列,那麼全部主鍵列和惟⼀索引列都必須包含進 來,若是表中有主鍵或惟⼀索引,那麼分區鍵必須是主鍵或惟⼀索引;
  • 分區函數限制,⽬前mysql僅⽀持如下分區函數:ABS()、CEILING()、DATEDIFF()、 DAY()、DAYOFMONTH()、DAYOFWEEK()、DAYOFYEAR()、EXTRACT()、FLOOR()、 HOUR()、MICROSECOND()、MINUTE()、MOD()、MONTH()、QUARTER()、SECOND()、 TIME_TO_SEC()、TO_DAYS()、TO_SECONDS()、UNIX_TIMESTAMP()、WEEKDAY()、YEAR()、 YEARWEEK();
  • 全部分區上的數據庫引擎要⼀致; ⼀張表能夠設置8192個分區。

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;
相關文章
相關標籤/搜索