暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OceanBase LIST分区

Ty3306 2023-02-03
930

LIST分区
语法格式
CREATE TABLE table_name (
column_name1 column_type
[, column_nameN column_type]
) PARTITION BY LIST ( expr(column_name1) | column_name1)
(
PARTITION p0 VALUES IN ( v01 [, v0N] )
[, PARTITION pN VALUES IN ( vN1 [, vNN] ) ]
[, PARTITION pX VALUES IN (default) ]
);
 
规则:
① 分区表达式的结果必须是整型。
② 分区表达式只能引用一列,不能有多列(即列向量)

案例
(1)MySQL模式
obclient>CREATE TABLE t_part_by_list (
c1 BIGINT PRIMARY KEY
, c2 VARCHAR(50)
) PARTITION BY list(c1)
(
PARTITION p0 VALUES IN (1, 2, 3)
, PARTITION p1 VALUES IN (5, 6)
, PARTITION p2 VALUES IN (DEFAULT)
);
 
(2)Oracle模式

obclient>CREATE TABLE t_part_by_list (
obclient> CREATE TABLE t_log_part_by_list (
log_id number NOT NULL
, log_value varchar2(50)
, log_date date NOT NULL DEFAULT sysdate
, PRIMARY key(log_id, log_value)
) PARTITION BY list(log_value)
(
PARTITION P01 VALUES ( '01' )
, PARTITION P02 VALUES ( '02' )
, PARTITION P03 VALUES ( '03' )
, PARTITION P04 VALUES ( '04' )
, PARTITION P05 VALUES ( '05' )
);
Query OK, 0 rows affected (0.10 sec)
obclient> INSERT INTO t_log_part_by_list(log_id, log_value) values(1,'01'),(2,'02'),(3,'03'),(4,'04'),(5,'05'),(6,'01');
Query OK, 6 rows affected (0.01 sec)
Records: 6 Duplicates: 0 Warnings: 0 


四 LIST COLUMNS分区表
仅支持MySQL,语法如下:
CREATE TABLE table_name (
column_name1 column_type
[, column_nameN column_type]
) PARTITION BY LIST COLUMNS ( column_name1 [, column_nameN ] )
(
PARTITION p0 VALUES IN ( v01 [, v0N] )
[, PARTITION pN VALUES IN ( vN1 [, vNN] ) ]
[, PARTITION pX VALUES IN (default) ]
); 
案例
obclient>CREATE TABLE t2 (
id varchar(64),
type varchar(16),
info varchar(512),
gmt_create datetime(6),
gmt_modified datetime(6),
partition_id varchar(2) GENERATED ALWAYS AS (substr(`id`,19,20)) VIRTUAL,
PRIMARY KEY (id)
) partition by list columns(partition_id)
(partition p0 values in ('00','01'),
partition p1 values in ('02','03'),
partition p2 values in (default));
 
五 HASH分区表
① 不能指定数据的分区键的列表特征。
② 不同范围内的数据大小相差非常大,并且很难手动调整均衡。
③ 使用 RANGE 分区后数据聚集严重。
④ 并行 DML、分区剪枝和分区连接等性能非常重要

案例
obclient>CREATE TABLE ware(
w_id int
, w_ytd number(12,2)
, w_tax number(4,4)
, w_name varchar(10)
, w_street_1 varchar(20)
, w_street_2 varchar(20)
, w_city varchar(20)
, w_state char(2)
, w_zip char(9)
, primary key(w_id)
) PARTITION by hash(w_id) partitions 60;

六 KEY分区
① KEY 分区的分区键不要求为整型,可以为任意类型
② KEY 分区的分区键不能使用表达式
③ KEY 分区的分区键支持向量
④ KEY 分区的分区键中不指定任何列时,表示 KEY 分区的分区键是主键

仅MySQL 支持,案例
obclient>CREATE TABLE t_log_part_by_key(
id INT,
gmt_create DATETIME,
info VARCHAR(20))
PARTITION BY KEY(id, gmt_create)
PARTITIONS 3;


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论