PolarDB-X 1.0是一個(gè)支持既分庫又分表的數(shù)據(jù)庫服務(wù)。本文將介紹PolarDB-X 1.0拆分函數(shù)的相關(guān)信息。
拆分方式
在PolarDB-X 1.0中,一張邏輯表的拆分方式由拆分函數(shù)(包括分片數(shù)目與路由算法)與拆分鍵(包括拆分鍵的 MySQL 數(shù)據(jù)類型)共同定義。只有當(dāng)PolarDB-X 1.0使用了相同的拆分函數(shù)和拆分鍵時(shí),才會被認(rèn)為分庫與分表使用了相同的拆分方式。相同的拆分方式讓PolarDB-X 1.0可以根據(jù)拆分鍵的值定位到唯一的物理分庫和物理分表。當(dāng)一張邏輯表的分庫拆分方式與分表拆分方式不一致時(shí),若SQL查詢沒有同時(shí)帶上分庫條件與分表?xiàng)l件,則PolarDB-X 1.0在查詢過程會進(jìn)行全分庫掃描或全分表掃描操作。
拆分函數(shù)對分庫、分表的支持情況
拆分函數(shù) | 說明 | 是否支持用于分庫 | 是否支持用于分表 |
---|---|---|---|
HASH | 簡單取模 | 是 | 是 |
STR_HASH | 截取字符串子串 | 是 | 是 |
UNI_HASH | 簡單取模 | 是 | 是 |
RIGHT_SHIFT | 數(shù)值向右移 | 是 | 是 |
RANGE_HASH | 雙拆分列哈希 | 是 | 是 |
MM | 按月份哈希 | 否 | 是 |
DD | 按日期哈希 | 否 | 是 |
WEEK | 按周哈希 | 否 | 是 |
MMDD | 按月日哈希 | 否 | 是 |
YYYYMM | 按年月哈希 | 是 | 是 |
YYYYWEEK | 按年周哈希 | 是 | 是 |
YYYYDD | 按年日哈希 | 是 | 是 |
拆分函數(shù)對全局二級索引的支持情況
拆分函數(shù)對數(shù)據(jù)類型支持情況
拆分函數(shù) | 數(shù)據(jù)類型 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
INT | BIGINT | MEDIUMINT | SMALLINT | TINYINT | VARCHAR | CHAR | DATE | DATETIME | TIMESTAMP | 其他類型 | |
HASH | √ | √ | √ | √ | √ | √ | √ | × | × | × | × |
UNI_HASH | √ | √ | √ | √ | √ | √ | √ | × | × | × | × |
RANGE_HASH | √ | √ | √ | √ | √ | √ | √ | × | × | × | × |
RIGHT_SHIFT | √ | √ | √ | √ | √ | × | × | × | × | × | × |
STR_HASH | × | × | × | × | × | √ | √ | × | × | × | × |
MM | × | × | × | × | × | × | × | √ | √ | √ | × |
DD | × | × | × | × | × | × | × | √ | √ | √ | × |
WEEK | × | × | × | × | × | × | × | √ | √ | √ | × |
MMDD | × | × | × | × | × | × | × | √ | √ | √ | × |
YYYYMM | × | × | × | × | × | × | × | √ | √ | √ | × |
YYYYWEEK | × | × | × | × | × | × | × | √ | √ | √ | × |
YYYYDD | × | × | × | × | × | × | × | √ | √ | √ | × |
拆分函數(shù)的語法說明
PolarDB-X 1.0兼容MySQL的DDL表操作語法,并添加了drds_partition_options
的分庫分表關(guān)鍵字,具體操作語法如下所示:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[drds_partition_options]
[partition_options]
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
[table_options]
[drds_partition_options]
[partition_options]
select_statement
drds_partition_options:
DBPARTITION BY
{ {HASH|YYYYMM|YYYYWEEK|YYYYDD|...}([column])}
[TBPARTITION BY
{ {HASH|MM|DD|WEEK|MMDD|YYYYMM|YYYYWEEK|YYYYDD|...}(column)}
[TBPARTITIONS num]
]