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 查詢時,如果查詢條件未能帶上一級磁區和二級磁區的鍵值,操作性能效率較低,建議不要使用,
表的主鍵或唯一索引需要包含磁區鍵,否則無法保證資料唯一性,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/308587.html
標籤:其它
上一篇:Redis主從配置總結
