在PostgreSQL中使用pg_pathman进行表分区后,SQL运行速度要慢得多

问题描述

在PostgreSQL SQL 9.6中使用pg_pathman 1.5进行表分区后,SQL运行速度更慢,分区列是从故事T1开始的'create_time'.create_time列的数据范围小于一个月,并且SQL如下: / p>

  SELECT
    t1.*
   FROM
     T1 t1
      JOIN T2 t2 ON t2.answer_question_id = t1.answer_question_id
      JOIN T3 t3 ON t3.answer_paper_id = t2.answer_paper_id
      JOIN T4 t4  ON t3.exam_paper_id = t4 .exam_paper_id
     WHERE
    t3.answer_paper_id = 'ab12-4567-7896-efgh'
   AND t1.create_time >= t4 .exam_begin_time AND t1.create_time <= t4 .exam_end_time
 

表T1,T2,T3,T4的定义如下:

T1:(id,answer_question_id,create_time )
T2:(id,answer_paper_id)
T3:(id,answer_paper_id,exam_paper_id )
T4:(id,exam_paper_id,exam_begin_time,exam_end_time)

我在pg_pathman中执行以下操作:

1,按表create_time进行表分区:

 select                                             
    create_range_partitions('T1'::regclass,'create_time','2018-11-01 00:00:00'::timestamp,interval '3 month',24,false) ;

2,数据迁移:

 select partition_table_concurrently('T1'::regclass,10000,1.0);
 
 

当我执行上面的sql时,它不能自行停止,除非我在pg_pathman分区之后手动取消它,但是在pg_pathman分区表T1之前只需要2秒钟即可完成sql的执行,为什么?如何解决此问题?

解决方法

我以为我找到了一个原因,解决方案是它需要为分区键(列)创建索引,并使用SQL的where子句中的分区列。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...