wuhengaiyi
作者wuhengaiyi联盟成员·2023-10-13 11:29
系统架构师·科电数据

kingbase分区表介绍

字数 2546阅读 733评论 0赞 2

一、分区表分类
分区表创建(继承和声名)分区类型: list range hash
二、分区表 创建sql

CREATE
      TABLE
            TAB_RANGE(
                  c1 INT,
                  c2 CHAR(20),
                  c3 VARCHAR
            ) PARTITION BY RANGE(c1)(
                  PARTITION p1
            VALUES less than('10'),
            PARTITION p2
      VALUES less than('20'),
      PARTITION p3
VALUES less than('30'),
PARTITION p4
VALUES less than('40')
            );

三、创建间隔分区(自动分区扩展)

CREATE TABLE measurement_interval
(
city_id INT NOT NULL,
logdate DATE NOT NULL,
peaktemp INT,
unitsales INT
)
PARTITION BY RANGE (logdate) INTERVAL ('3 MONTH'::INTERVAL)
(
PARTITION p1 VALUES LESS THAN ('2006-04-01')
);

四、list分区

create  table test(id int ,id1 varchar(10)) partition by list ( id);
create  table test_1 partition of   test for values  in (100);
create  table test_1 partition of   test for values  in (200);
create table test_range(id int,id2 varchar(20))  partition by  range ( id);
create table test_range_1 partition of test_range  for values  from (0) to (100);
create table test_range_2 partition of test_range  for values  from (100) to (200);

五、分区表踢出

alter  table test attach partition test_1 for values in (1);

六、分区表增加

alter  table test attach partition test_1 for values in (1);

七、分区表查看

查看表的分区键
select sys_get_partkeydef('test' ::regclass);
查看分区表的分区键
select sys_get_partition_constraintdef('test_1' ::regclass);
查看那些表是分区母表:
select  partrelid ::regclass from  sys_partitioned_table ;
那些是分区表
select  relname  from sys_class  where   relispartition  = 't';

分区表优化

enable_partition_pruning = on  分区修剪
constraint_exclusion = partition

分区索引

全局索引:(全局分区索引值唯一,分区键上建的索引全局分区索引  创建不了全局索引)
CREATE UNIQUE INDEX index_global_measurement_range ON measurement_range(city_id) GLOBAL;
本地分区索引:
CREATE INDEX index_local_measurement_range ON measurement_range(city_id) LOCAL;分区表添加主键同时会在主键列创建一个全局索引(索引有GLOBAL。
在分区表创建索引(默认为local本地索引,全局索引需要global声明),会自动在每个分区上创建一个本地索引。
分区表唯一约束必须包含分区键。
分区表成功创建全局索引必须满足条件:索引类型是唯一索引(unique)并且不包含分区键 。  

分区表父表不支持CONCURRENTLY、parallel_workers选项,但是子分区支持CONCURRENTLY、parallel_workers选项。


使用on only方式在父表创建失效的索引。
子分区使用CONCURRENTLY选项,手动创建子分区索引。
然后使用ALTER INDEX .. ATTACH PARTITION到父索引,父索引会自动标记为有效。分区表创建索引建议:
1.设置maintenance_work_mem参数:
通过在会话级别(session)设置maintenance_work_mem可以提升创建索引的效率。例如(set maintenance_work_mem='1024MB')

2.使用on only关键字+并发(CONCURRENTLY)进行分区表索引的创建:
优点:在创建索引时不阻塞DML操作,在生产环境进行分区表创建索引不会影响到业务。

缺点:会带来额外 CPU 和 I/O 开销,可能会拖慢其他操作。死锁或者违反唯一约束索引创建将会失败(INVALID),重新create 或者reindex就可以。

并发创建索引的过程可以分为三个阶段:第一阶段是创建无效的索引并加锁,第二阶段是扫描表中的所有可见元组构建索引并更新标志位,第三阶段是为缺少的元组补充索引并等待所有早于当前快照的事务结束。 

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论0 条评论

Ctrl+Enter 发表

相关文章

X社区推广