我有postgresql功能,工作非常慢。其中一个查询存在问题。有没有办法优化它?我做的索引没多大帮助。
INSERT INTO aa_c_axis_doc_oper
SELECT a.pool_id,
l.lane_id,
a.axis_id,
l.id AS src_row_id,
a.running_sum_abs,
a.running_sum_abs_begin_max,
l.program_id
FROM aa_oper_axis AS a
INNER JOIN aa_src1 AS l
ON a.pool_id = l.pool_id
WHERE l.running_sum_abs_begin <= a.running_sum_abs_begin_max
AND a.running_sum_abs <= l.running_sum_abs
解释
Insert on aa_c_axis_doc_oper (cost=0.00..19727005.41 rows=345535083 width=84) (actual time=5428290.637..5428290.637 rows=0 loops=1)
-> Nested Loop (cost=0.00..19727005.41 rows=345535083 width=84) (actual time=235.809..5348024.371 rows=9954308 loops=1)
-> Seq Scan on aa_oper_axis a (cost=0.00..50396.63 rows=6085633 width=72) (actual time=0.040..3351.155 rows=6012431 loops=1)
-> Index Scan using aa_src1_pool_id_running_sum_abs_begin_running_sum_abs_idx on aa_src1 l (cost=0.00..2.75 rows=57 width=34) (actual time=0.881..0.887 rows=2 loops=6012431)
Index Cond: ((pool_id = a.pool_id) AND (running_sum_abs_begin <= a.running_sum_abs_begin_max) AND (a.running_sum_abs <= running_sum_abs))
Total runtime: 5428290.775 ms
答案 0 :(得分:0)
我建议弄清楚SELECT或INSERT是否是瓶颈。如果SELECT很慢,请尝试将索引添加到WHERE中使用的字段(如running_sum_abs_begin)。如果插入是播种,请检查您是否有例如在aa_c_axis_doc_oper表上插入触发器。
如果要插入大量记录,则可能是单个事务问题。您应该尝试将插入分成多个较小的事务。
答案 1 :(得分:0)
aa_c_axis_doc_oper上是否有索引或触发器?如果是这样,请尝试暂时禁用它们。
aa_oper_axis和aa_src1上是否有pool_id的索引?如果没有,请尝试添加它们。