PolarDB-X 1.0是一個支援既分庫又分表的資料庫服務。本文將介紹PolarDB-X 1.0拆分函數的相關資訊。
拆分方式
在PolarDB-X 1.0中,一張邏輯表的拆分方式由拆分函數(包括分區數目與路由演算法)與拆分鍵(包括拆分鍵的 MySQL 資料類型)共同定義。只有當PolarDB-X 1.0使用了相同的拆分函數和拆分鍵時,才會被認為分庫與分表使用了相同的拆分方式。相同的拆分方式讓PolarDB-X 1.0可以根據拆分鍵的值定位到唯一的物理分庫和物理分表。當一張邏輯表的分庫拆分方式與分表拆分方式不一致時,若SQL查詢沒有同時帶上分庫條件與分表條件,則PolarDB-X 1.0在查詢過程會進行全分庫掃描或全分表掃描操作。
拆分函數對分庫、分表的支援情況
| 拆分函數 | 說明 | 是否支援用於分庫 | 是否支援用於分表 |
| HASH | 簡單模數 | 是 | 是 |
| STR_HASH | 截取字串子串 | 是 | 是 |
| UNI_HASH | 簡單模數 | 是 | 是 |
| RIGHT_SHIFT | 數值向右移 | 是 | 是 |
| RANGE_HASH | 雙拆分列雜湊 | 是 | 是 |
| MM | 按月份雜湊 | 否 | 是 |
| DD | 按日期雜湊 | 否 | 是 |
| WEEK | 按周雜湊 | 否 | 是 |
| MMDD | 按月日雜湊 | 否 | 是 |
| YYYYMM | 按年月雜湊 | 是 | 是 |
| YYYYWEEK | 按年周雜湊 | 是 | 是 |
| YYYYDD | 按年日雜湊 | 是 | 是 |
拆分函數對全域二級索引的支援情況
拆分函數對資料類型支援情況
| 拆分函數 | 資料類型 | ||||||||||
| 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 | × | × | × | × | × | × | × | √ | √ | √ | × |
拆分函數的文法說明
PolarDB-X 1.0相容MySQL的DDL表操作文法,並添加了drds_partition_options的分庫分表關鍵字,具體操作文法如下所示:
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]
]