PostgreSQL将大数据从一个表复制到另一个表
我有一个体系结构,当一些数据有时被复制到临时表中,然后在命令下,必须将这些有条件的数据复制到另一个表中,在此运行之前,根据所有表中相同的对象id进行计数、删除和更新。 最长的操作是复制-需要10分钟!在30万行。PostgreSQL将大数据从一个表复制到另一个表,sql,postgresql,Sql,Postgresql,我有一个体系结构,当一些数据有时被复制到临时表中,然后在命令下,必须将这些有条件的数据复制到另一个表中,在此运行之前,根据所有表中相同的对象id进行计数、删除和更新。 最长的操作是复制-需要10分钟!在30万行。 插入t1(t1_f1,t1_f2,名称,值)在(对象id)t1_f1,t1_f2,名称,值上选择DISTINCT,其中加载过程id=695-例如 我可以加快这个过程吗?或者这是糟糕的架构,我必须改变它 一些更多的堆表可能包含很多数据,要复制的数据可能有数百万行。在堆和其他表中索引的某些
插入t1(t1_f1,t1_f2,名称,值)在(对象id)t1_f1,t1_f2,名称,值上选择DISTINCT,其中加载过程id=695
-例如
我可以加快这个过程吗?或者这是糟糕的架构,我必须改变它
一些更多的堆表可能包含很多数据,要复制的数据可能有数百万行。在堆和其他表中索引的某些字段(用于计数或筛选)
这是一个针对不太大数据的计划
Insert on main_like (cost=2993.63..3115.51 rows=6094 width=797) (actual time=6143.194..6143.194 rows=0 loops=1)
-> Subquery Scan on "*SELECT*" (cost=2993.63..3115.51 rows=6094 width=797) (actual time=55.995..125.081 rows=6094 loops=1)
-> Unique (cost=2993.63..3024.10 rows=6094 width=796) (actual time=55.909..79.237 rows=6094 loops=1)
-> Sort (cost=2993.63..3008.86 rows=6094 width=796) (actual time=55.904..69.195 rows=6094 loops=1)
Sort Key: main_loadingprocessobjects.object_id
Sort Method: quicksort Memory: 3321kB
-> Seq Scan on main_loadingprocessobjects (cost=0.00..465.02 rows=6094 width=796) (actual time=0.578..8.285 rows=6094 loops=1)
Filter: (loading_process_id = 695)
Rows Removed by Filter: 1428
Planning time: 0.394 ms
Execution time: 6143.631 ms
解释但不插入-
Unique (cost=2993.63..3024.10 rows=6094 width=796) (actual time=48.915..52.902 rows=6094 loops=1)
-> Sort (cost=2993.63..3008.86 rows=6094 width=796) (actual time=48.911..49.959 rows=6094 loops=1)
Sort Key: object_id
Sort Method: quicksort Memory: 3321kB
-> Seq Scan on main_loadingprocessobjects (cost=0.00..465.02 rows=6094 width=796) (actual time=0.401..5.516 rows=6094 loops=1)
Filter: (loading_process_id = 695)
Rows Removed by Filter: 1428
Planning time: 0.214 ms
Execution time: 53.694 ms
main_loadingprocessobjects-是堆
main_like-is t1您可能会关注以下几点:
希望我的这一点能对你未来的发展有所帮助。请分享
SELECT DISTINCT ON(object_id)t1_f1,t1_f2,name,value where type='ti'和category='added'
@VaoTsun的执行计划。如果你想从pgAdmin解释,我已经添加了它。对不起,不-我的意思是explain analysis SELECT DISTINCT ON(object_id)t1_f1,t1_f2,name,value,其中type='ti'和category='added'
done,我使示例查询更真实=)您能解释并分析这个查询吗?在加载进程id=695的位置,在(对象id)t1 f1、t1 f2、名称、值上选择DISTINCT。没有插入声明?谢谢。hmmm关于复制-我是否必须首先将数据从select复制到文件,然后再从文件复制到目标表?是的,您可以这样做。或者您可以将其与文件结合使用,使您的文件成为外部表。您可以创建过程来执行该过程。