我有两个表,有超过1000万行。
create table TBL1 (
GUID UUID not null default gen_random_uuid(),
DT DATE not null,
...
constraint tbl1_pk primary key (GUID, DT)
)
partition by RANGE (dt);
create table TBL2 (
GUID UUID not null default gen_random_uuid(),
DT DATE not null,
TBL1_GUID UUID not null,
...
constraint tbl2_pk primary key (GUID, DT)
)
PARTITION BY RANGE (dt);
alter table TBL2
add constraint FK_TBL2__TBL1 foreign key (DT, TBL1_GUID)
references TBL1 (DT, GUID)
on delete restrict on update restrict;
每个表按月有24个分区。
主键中的顺序列重要吗?外键中的顺序列重要吗?我是否需要为每个分区创建fk,而不是在hole表上?查询运行缓慢。
查询运行缓慢。
1条答案
按热度按时间yr9zkbsy1#
我不能评论你运行缓慢的查询,因为你没有包括查询,也没有他们的
EXPLAIN (ANALYZE, BUFFERS)
输出。但我有几个建议给你:
(guid, dt)
上定义主键。相反,为每个分区单独在guid
上定义主键。这更接近您实际想要的:guid
上的全局唯一约束。guid
上进行连接,请将enable_partitionwise_join
设置为on
,以便PostgreSQL在分区级别上进行连接,这通常会执行得更好。