您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關mysql中怎么創建表分區,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
1.RANGE 分區:
CREATE TABLE t5(id INT,dt DATETIME NOT NULL
)
PARTITION BY RANGE (TO_DAYS(dt)) (
PARTITION p0 VALUES LESS THAN (TO_DAYS('2014-01-01')),
PARTITION p1 VALUES LESS THAN (TO_DAYS('2014-02-01')),
PARTITION p2 VALUES LESS THAN (TO_DAYS('2014-03-01')),
PARTITION p3 VALUES LESS THAN MAXVALUE);
注意range分區不能直接對日期型數據分區,所以要對分日期進行分區,需要變通一下,將日期轉換成int型才行。
CREATE TABLE t5(id INT,dt DATETIME NOT NULL
)
PARTITION BY RANGE (dt) (
PARTITION p0 VALUES LESS THAN ('2014-01-02'),
PARTITION p1 VALUES LESS THAN ('2014-01-03'),
PARTITION p2 VALUES LESS THAN ('2014-01-04'),
PARTITION p3 VALUES LESS THAN MAXVALUE);
如果使用上面的語句,直接使用日期列進行分區,則會出現以下錯誤:
錯誤碼: 1697
VALUES value for partition 'p0' must have type INT
2.LIST分區
CREATE TABLE t6
(userid INT NOT NULL ,
usertype INT NOT NULL
)
PARTITION BY LIST(usertype)
(
PARTITION p1 VALUES IN (1),
PARTITION p2 VALUES IN (2),
PARTITION p3 VALUES IN (3)
);
3.HASH分區
HASH分區主要用來確保數據在預先確定數目的分區中平均分布。只需指定一個列值或表達式作為哈希列,然后指定分區數據即可。
CREATE TABLE t8
(userid INT NOT NULL ,
dt DATE
)
PARTITION BY HASH(MONTH(dt))
PARTITIONS 6;
HASH分區有個問題,就是where條件是指定的一個范圍的話,將會掃描所有分區,這就達不到使用分區表來減少掃描范圍獲得性能的提高的目的。尤其是使用達式作為分區關鍵字時,一定要注意類型,最好是數值型。
EXPLAIN PARTITIONS
SELECT COUNT(*) FROM t8 WHERE dt>'2013-08-01‘
以上語句就是掃描所有分區.
4.key分區
Key分區類型于HASH分區,HASH分區使用的用戶定義的表達式,而KEY分區的哈希函數是由MySQL 服務器提供,這些函數是基于與PASSWORD()一樣的運算法則。它與Hash分區主要的區別是,分區依據只能是一個或多個列名的一個列表。
CREATE TABLE t9
(userid INT NOT NULL ,
dt DATE
)
PARTITION BY HASH(dt)
PARTITIONS 6;
Key分區和HASH分區一樣,有范圍掃描的問題。
5.復合分區
1)RANGE - HASH(范圍哈希)復合分區
CREATE TABLE t11
(id INT NOT NULL ,
dt DATE
)
PARTITION BY RANGE(id)
SUBPARTITION BY HASH(YEAR(dt))
SUBPARTITIONS 4
(
PARTITION p1 VALUES LESS THAN (100000),
PARTITION p2 VALUES LESS THAN maxvalue
);
2)RANGE- KEY復合分區
CREATE TABLE t12
(id INT NOT NULL ,
dt DATE
)
PARTITION BY RANGE(id)
SUBPARTITION BY KEY(dt)
SUBPARTITIONS 4
(
PARTITION p1 VALUES LESS THAN (100000),
PARTITION p2 VALUES LESS THAN maxvalue
);
3)LIST - HASH復合分區
CREATE TABLE t13 (
userid INT,
usertype INT
)
PARTITION BY LIST (usertype)
SUBPARTITION BY HASH(userid)
SUBPARTITIONS 3
(
PARTITION p1 VALUES IN (1),
PARTITION p2 VALUES IN (2),
PARTITION p3 VALUES IN (3)
)
;
4)LIST - KEY 復合分區
CREATE TABLE t14 (
userid INT,
usertype INT
)
PARTITION BY LIST (usertype)
SUBPARTITION BY KEY(userid)
SUBPARTITIONS 3
(
PARTITION p1 VALUES IN (1),
PARTITION p2 VALUES IN (2),
PARTITION p3 VALUES IN (3)
)
;
看完上述內容,你們對mysql中怎么創建表分區有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。