임시 테이블을 만들려고 할 때 성능에 문제가 있습니다. Duration [0] in seconds=11
:이 기능을 실행하면, 내가 통지를 얻을 수 있기 때문에 http://explain.depesz.com/s/uerF
그것은, 이상하다 : 임시 테이블에 행 삽입
StartTime := clock_timestamp();
CREATE TEMP TABLE wo_tmp WITH (OIDS) AS
SELECT workorders1_.woid AS w_id, workorders1_.woid4seg AS w_id4seg
FROM common.workorders workorders1_
INNER JOIN common.lines lines2_ ON workorders1_.wolineid=lines2_.lineid
INNER JOIN common.products products2_ ON workorders1_.woprodid=products2_.prodid
INNER JOIN common.depts depts3_ ON lines2_.linedeptid=depts3_.deptid
WHERE workorders1_.wostatus='F'
AND workorders1_.wotypestatus = ANY ('{R,C,I,D}'::text[])
AND (p_deptid = 0 OR (depts3_.deptid = p_deptid AND ((p_deptid = 5 AND workorders1_.wosegid = 1) OR workorders1_.wosegid = 4)))
AND (p_lineid = 0 OR lines2_.lineid = p_lineid)
AND (p_prodid = 0 OR products2_.prodid = p_prodid)
AND (p_nrkokili = 0 OR workorders1_.wonrkokili = p_nrkokili)
AND (p_accepted = TRUE OR workorders1_.worjacceptstatus = 'Y')
AND workorders1_.wodateleaverr BETWEEN p_dfr AND p_dto
AND lines2_.status <> 'D';
CREATE INDEX wo_tmp_w_id_idx
ON wo_tmp USING btree (w_id ASC NULLS LAST);
CREATE INDEX wo_tmp_w_id4seg_idx
ON wo_tmp USING btree (w_id4seg ASC NULLS LAST);
EndTime := clock_timestamp();
Delta := extract('epoch' from EndTime)::bigint - extract('epoch' from StartTime)::bigint;
RAISE NOTICE 'Duration [0] in seconds=%', Delta;
가 여기에
explain analyze
보고서입니다 : 다음 코드는 plpgsql 기능의 일부입니다. 임시 테이블을 만들지 않고 쿼리를 확인하면 결과 시간은
~300ms
입니다.
임시 테이블에 레코드 (~ 73k)를 삽입하는 데 11 초가 걸릴 수 있습니까? 속도를 낼 수 있을까요?
색인 생성에는 다소 시간이 걸릴 수도 있습니다. 프로 시저 내부의 모든 쿼리에 대해'EXPLAIN ANALYZE'를 실행하십시오. –
나는 달렸지 만 임시 테이블 만 생성하는 데는 시간이 걸립니다. – bemol
* 항상 * 중요한 정보 인 함수 머리글과 바닥 글을 포함하십시오. 또한 [8.4 페이지는 eol에 도달했으며 더 이상 지원되지 않습니다] (http://www.postgresql.org/support/versioning/). 현재 버전으로의 업그레이드를 긴급히 고려하십시오. –