PolarDB-X是一个支持既分库又分表的数据库服务。本文将介绍PolarDB-X拆分函数的相关信息。
拆分方式
在PolarDB-X中,一张逻辑表的拆分方式由拆分函数(包括分片数目与路由算法)与拆分键(包括拆分键的 MySQL 数据类型)共同定义。只有当PolarDB-X使用了相同的拆分函数和拆分键时,才会被认为分库与分表使用了相同的拆分方式。相同的拆分方式让PolarDB-X可以根据拆分键的值定位到唯一的物理分库和物理分表。当一张逻辑表的分库拆分方式与分表拆分方式不一致时,若SQL查询没有同时带上分库条件与分表条件,则PolarDB-X在查询过程会进行全分库扫描或全分表扫描操作。
拆分函数对分库、分表的支持情况
拆分函数对全局二级索引的支持情况
- PolarDB-X支持全局二级索引,从数据存储的角度看,每个GSI对应一张用于保存索引数据的逻辑表,称为索引表。
- PolarDB-X还支持创建GSI时指定索引表的拆分方式,并且对拆分函数的支持范围与普通逻辑表相同,创建GSI的详细语法,请参见使用全局二级索引。
拆分函数对数据类型支持情况
拆分函数 | 数据类型 | ||||||||||
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兼容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] ]