乐趣区

关于数据库:腾讯云TDSQL-MySQL版-开发指南-二级分区

TDSQL MySQL 版 目前反对 Range 和 List 两种格局的二级分区,具体建表语法和 MySQL 分区语法相似。

二级分区语法
一级 Hash,二级 List 分区示例如下:

MySQL [test]> CREATE TABLE customers_1 (
first_name VARCHAR(25) key,
last_name VARCHAR(25),
street_1 VARCHAR(30),
street_2 VARCHAR(30),
city VARCHAR(15),
renewal DATE
) shardkey=first_name
PARTITION BY LIST (city) (
PARTITION pRegion_1 VALUES IN(‘Beijing’, ‘Tianjin’, ‘Shanghai’),
PARTITION pRegion_2 VALUES IN(‘Chongqing’, ‘Wulumuqi’, ‘Dalian’),
PARTITION pRegion_3 VALUES IN(‘Suzhou’, ‘Hangzhou’, ‘Xiamen’),
PARTITION pRegion_4 VALUES IN(‘Shenzhen’, ‘Guangzhou’, ‘Chengdu’)
);
一级 Range,二级 List 创立语法如下:

MySQL [test]> CREATE TABLE tb_sub_r_l (
id int(11) NOT NULL,
order_id bigint NOT NULL,
PRIMARY KEY (id,order_id))
PARTITION BY list(order_id)
(PARTITION p0 VALUES in (2121122),
PARTITION p1 VALUES in (38937383))
TDSQL_DISTRIBUTED BY RANGE(id) (s1 values less than (100),s2 values less than (1000));
Query OK, 0 rows affected, 1 warning (0.35 sec)
Range 反对类型
DATE,DATETIME,TIMESTAMP。
反对 year,month,day 函数,函数为空和 day 函数一样。
TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT。
反对 year,month,day 函数,此时传入的值转换为年月日,而后和分表信息进行比照。
List 反对类型
DATE,DATETIME,TIMESTAMP。
反对年月日函数。
TINYINT, SMALLINT, MEDIUMINT, INT , BIGINT。
正告
倡议不要应用 TIMESTAMP 类型作为分区键,因为 TIMESTAMP 受到时区的影响,同时只能应用到 2038 年。
如果分区键是 char 或者 varchar 类型,倡议长度不超 255。
应用场景和办法倡议
倡议业务尽量都应用一级分区表。

应用前依据业务长期场景正当设计表构造,二级分区实用于表构造创立后长期都不须要 DDL 变更、须要定期进行分区数据清理和裁剪的场景,如日志流水表。
正当设计二级分区的粒度,二级分区的粒度倡议不要划分得太细,防止产生过多的二级子表。如流水表按月进行二级分区,而不是按天 / 小时进行分区,防止文件系统上数据文件个数过多。
在对二级分区表进行 SQL 查问时,查问条件须要尽量带上一级分区和二级分区的键值,防止执行查问时须要关上很多的数据文件进行搜寻。
在对二级分区表进行 join 查问时,如果查问条件未能带上一级分区和二级分区的键值,操作性能效率较低,倡议不要应用。
表的主键或惟一索引须要蕴含分区键,否则无奈保证数据唯一性。

退出移动版