mysql幾種表分割槽建立案例

datapeng發表於2016-04-13

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)
)
;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29371470/viewspace-2080647/,如需轉載,請註明出處,否則將追究法律責任。

相關文章