Improve response time of a SQL command - Mailing list pgsql-general
From | Carlos H. Reimer |
---|---|
Subject | Improve response time of a SQL command |
Date | |
Msg-id | PEEPKDFEHHEMKBBFPOOKKENNDMAA.carlos.reimer@opendb.com.br Whole thread Raw |
Responses |
Re: Improve response time of a SQL command
|
List | pgsql-general |
Hi,
I would like to improve the response time of the following SQL command but I need some help to indentify where is it taking most of the processing time. It seams that it is in the Seq Scan on tt_gra gra, but not sure. Am I right?
Can a new index help in this issue?
Thank you in advance!
explain analyze
SELECT IPR.REFPRO, IPR.NOMPRO, IPR.MEDUNI,
IVE.VLRMOV /IVE.QTDMOV AS PRECOV,
VEN.DESCON, IVE.QTDMOV,
COALESCE(IVE.TAX001,0) AS ICMS,
SUBSTR(SIT.DESDOM,1,30) AS SITUACAO,
IVE.VLRMOV AS TOTITE,
IOR.FILRES
FROM TT_IVE IVE LEFT OUTER JOIN TV_IPR IPR ON IPR.FILMAT = IVE.FILMAT AND IPR.CODMAT = IVE.CODMAT AND IPR.CODCOR = IVE.CODCOR AND IPR.CODTAM = IVE.CODTAM
LEFT OUTER JOIN TT_DOM SIT ON SIT.CODARQ = 'IVE' AND SIT.NOMCPO = 'SITMOV' AND SIT.CODCHR = IVE.SITMOV
LEFT OUTER JOIN TT_VEN VEN ON IVE.CODFIL = VEN.CODFIL AND IVE.SEQUEN = VEN.SEQUEN
LEFT OUTER JOIN TT_IOR IOR ON IVE.CODFIL = IOR.FILIVE AND IVE.SEQUEN = IOR.SEQIVE AND IVE.NUMITE = IOR.NUMIVE
WHERE IVE.CODFIL= '001'
AND IVE.SEQUEN= ' 113519'
SELECT IPR.REFPRO, IPR.NOMPRO, IPR.MEDUNI,
IVE.VLRMOV /IVE.QTDMOV AS PRECOV,
VEN.DESCON, IVE.QTDMOV,
COALESCE(IVE.TAX001,0) AS ICMS,
SUBSTR(SIT.DESDOM,1,30) AS SITUACAO,
IVE.VLRMOV AS TOTITE,
IOR.FILRES
FROM TT_IVE IVE LEFT OUTER JOIN TV_IPR IPR ON IPR.FILMAT = IVE.FILMAT AND IPR.CODMAT = IVE.CODMAT AND IPR.CODCOR = IVE.CODCOR AND IPR.CODTAM = IVE.CODTAM
LEFT OUTER JOIN TT_DOM SIT ON SIT.CODARQ = 'IVE' AND SIT.NOMCPO = 'SITMOV' AND SIT.CODCHR = IVE.SITMOV
LEFT OUTER JOIN TT_VEN VEN ON IVE.CODFIL = VEN.CODFIL AND IVE.SEQUEN = VEN.SEQUEN
LEFT OUTER JOIN TT_IOR IOR ON IVE.CODFIL = IOR.FILIVE AND IVE.SEQUEN = IOR.SEQIVE AND IVE.NUMITE = IOR.NUMIVE
WHERE IVE.CODFIL= '001'
AND IVE.SEQUEN= ' 113519'
;
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------
Nested Loop Left Join (cost=2234.61..2326.73 rows=10 width=148) (actual time=6641.168..6689.295 rows=1 loops=1)
-> Nested Loop Left Join (cost=2234.61..2291.17 rows=9 width=172) (actual time=6630.985..6679.105 rows=1 loops=1)
-> Hash Left Join (cost=2234.61..2255.78 rows=9 width=163) (actual time=6630.873..6678.987 rows=1 loops=1)
Hash Cond: ("outer".sitmov = "inner".codchr)
-> Nested Loop Left Join (cost=2231.16..2252.28 rows=9 width=154) (actual time=6628.171..6676.282 rows=1 loo
ps=1)
Join Filter: (("inner".filmat = "outer".filmat) AND ("inner".codmat = "outer".codmat) AND ("inner".codco
r = "outer".codcor) AND ("inner".codtam = "outer".codtam))
-> Index Scan using pk_ive on tt_ive ive (cost=0.00..17.88 rows=9 width=98) (actual time=17.450..17.45
5 rows=1 loops=1)
Index Cond: ((codfil = '001'::bpchar) AND (sequen = ' 113519'::bpchar))
-> Materialize (cost=2231.16..2231.28 rows=12 width=126) (actual time=3.803..6593.478 rows=32069 loops
=1)
-> Subquery Scan ipr (cost=4.69..2231.15 rows=12 width=126) (actual time=3.791..6541.255 rows=32
069 loops=1)
-> Nested Loop (cost=4.69..2231.03 rows=12 width=1264) (actual time=3.775..6353.475 rows=3
2069 loops=1)
-> Hash Join (cost=4.69..2081.99 rows=11 width=658) (actual time=3.257..1305.769 row
s=32069 loops=1)
Hash Cond: (("outer".codcor)::text = (("inner".codite)::text || ''::text))
-> Hash Join (cost=2.06..2077.23 rows=161 width=613) (actual time=1.386..697.0
22 rows=32069 loops=1)
Hash Cond: (("outer".codtam)::text = (("inner".codite)::text || ''::text))
-> Seq Scan on tt_gra gra (cost=0.00..1672.14 rows=32114 width=551) (act
ual time=0.047..78.800 rows=32069 loops=1)
-> Hash (cost=2.06..2.06 rows=1 width=70) (actual time=0.087..0.087 rows
=0 loops=1)
-> Nested Loop (cost=0.00..2.06 rows=1 width=70) (actual time=0.05
2..0.060 rows=1 loops=1)
Join Filter: ("outer".codsub = "inner".codtab)
-> Seq Scan on tt_sub sub (cost=0.00..1.01 rows=1 width=48)
(actual time=0.014..0.015 rows=1 loops=1)
-> Seq Scan on td_sub dsub (cost=0.00..1.02 rows=2 width=31)
(actual time=0.011..0.015 rows=2 loops=1)
-> Hash (cost=2.60..2.60 rows=13 width=54) (actual time=0.321..0.321 rows=0 lo
ops=1)
-> Merge Join (cost=2.40..2.60 rows=13 width=54) (actual time=0.219..0.2
66 rows=13 loops=1)
Merge Cond: ("outer".codtab = "inner".coddiv)
-> Sort (cost=1.03..1.03 rows=2 width=22) (actual time=0.120..0.12
2 rows=2 loops=1)
Sort Key: ddiv.codtab
-> Seq Scan on td_div ddiv (cost=0.00..1.02 rows=2 width=22)
(actual time=0.016..0.021 rows=2 loops=1)
-> Sort (cost=1.37..1.40 rows=13 width=41) (actual time=0.075..0.0
83 rows=13 loops=1)
Sort Key: div.coddiv
-> Seq Scan on tt_div div (cost=0.00..1.13 rows=13 width=41)
(actual time=0.016..0.049 rows=13 loops=1)
-> Index Scan using ak_pro_tippro on tt_pro pro (cost=0.00..3.60 rows=1 width=622) (
actual time=0.016..0.018 rows=1 loops=32069)
Index Cond: ((pro.filmat = "outer".filmat) AND (pro.codmat = "outer".codmat))
SubPlan
-> Index Scan using ak_pre_gra on tt_pre pre (cost=1.01..4.47 rows=1 width=11) (ac
tual time=0.028..0.030 rows=1 loops=32069)
Index Cond: ((filpre = $4) AND (codpre = $5) AND (filmat = $6) AND (codmat = $
7) AND (codcor = $8) AND (codtam = $9))
InitPlan
-> Seq Scan on tt_cfg (cost=0.00..1.01 rows=1 width=17) (actual time=0.022
..0.024 rows=1 loops=1)
-> Seq Scan on td_med med4 (cost=0.00..1.15 rows=1 width=6) (actual time=0.003..0.
012 rows=1 loops=32069)
Filter: ($3 = codtab)
-> Seq Scan on td_med med3 (cost=0.00..1.15 rows=1 width=6) (actual time=0.003..0.
012 rows=1 loops=32069)
Filter: ($2 = codtab)
-> Seq Scan on td_med med2 (cost=0.00..1.15 rows=1 width=6) (actual time=0.003..0.
012 rows=1 loops=32069)
Filter: ($1 = codtab)
-> Seq Scan on td_med med1 (cost=0.00..1.15 rows=1 width=6) (actual time=0.004..0.
015 rows=1 loops=32069)
Filter: ($0 = codtab)
-> Hash (cost=3.44..3.44 rows=1 width=19) (actual time=0.106..0.106 rows=0 loops=1)
-> Index Scan using i_lc_dom_str on tt_dom sit (cost=0.00..3.44 rows=1 width=19) (actual time=0.077..0
.084 rows=2 loops=1)
Index Cond: ((codarq = 'IVE'::bpchar) AND ((nomcpo)::text = 'SITMOV'::text))
-> Index Scan using pk_ven on tt_ven ven (cost=0.00..3.92 rows=1 width=30) (actual time=0.089..0.092 rows=1 loops=
1)
Index Cond: (("outer".codfil = ven.codfil) AND ("outer".sequen = ven.sequen))
-> Index Scan using i_uq_ior_ive on tt_ior ior (cost=0.00..3.93 rows=1 width=38) (actual time=8.524..8.528 rows=1 loops=
1)
Index Cond: (("outer".codfil = ior.filive) AND ("outer".sequen = ior.seqive) AND ("outer".numite = ior.numive))
Total runtime: 6697.206 ms
(53 rows)
-----------------------------------------------------------
Nested Loop Left Join (cost=2234.61..2326.73 rows=10 width=148) (actual time=6641.168..6689.295 rows=1 loops=1)
-> Nested Loop Left Join (cost=2234.61..2291.17 rows=9 width=172) (actual time=6630.985..6679.105 rows=1 loops=1)
-> Hash Left Join (cost=2234.61..2255.78 rows=9 width=163) (actual time=6630.873..6678.987 rows=1 loops=1)
Hash Cond: ("outer".sitmov = "inner".codchr)
-> Nested Loop Left Join (cost=2231.16..2252.28 rows=9 width=154) (actual time=6628.171..6676.282 rows=1 loo
ps=1)
Join Filter: (("inner".filmat = "outer".filmat) AND ("inner".codmat = "outer".codmat) AND ("inner".codco
r = "outer".codcor) AND ("inner".codtam = "outer".codtam))
-> Index Scan using pk_ive on tt_ive ive (cost=0.00..17.88 rows=9 width=98) (actual time=17.450..17.45
5 rows=1 loops=1)
Index Cond: ((codfil = '001'::bpchar) AND (sequen = ' 113519'::bpchar))
-> Materialize (cost=2231.16..2231.28 rows=12 width=126) (actual time=3.803..6593.478 rows=32069 loops
=1)
-> Subquery Scan ipr (cost=4.69..2231.15 rows=12 width=126) (actual time=3.791..6541.255 rows=32
069 loops=1)
-> Nested Loop (cost=4.69..2231.03 rows=12 width=1264) (actual time=3.775..6353.475 rows=3
2069 loops=1)
-> Hash Join (cost=4.69..2081.99 rows=11 width=658) (actual time=3.257..1305.769 row
s=32069 loops=1)
Hash Cond: (("outer".codcor)::text = (("inner".codite)::text || ''::text))
-> Hash Join (cost=2.06..2077.23 rows=161 width=613) (actual time=1.386..697.0
22 rows=32069 loops=1)
Hash Cond: (("outer".codtam)::text = (("inner".codite)::text || ''::text))
-> Seq Scan on tt_gra gra (cost=0.00..1672.14 rows=32114 width=551) (act
ual time=0.047..78.800 rows=32069 loops=1)
-> Hash (cost=2.06..2.06 rows=1 width=70) (actual time=0.087..0.087 rows
=0 loops=1)
-> Nested Loop (cost=0.00..2.06 rows=1 width=70) (actual time=0.05
2..0.060 rows=1 loops=1)
Join Filter: ("outer".codsub = "inner".codtab)
-> Seq Scan on tt_sub sub (cost=0.00..1.01 rows=1 width=48)
(actual time=0.014..0.015 rows=1 loops=1)
-> Seq Scan on td_sub dsub (cost=0.00..1.02 rows=2 width=31)
(actual time=0.011..0.015 rows=2 loops=1)
-> Hash (cost=2.60..2.60 rows=13 width=54) (actual time=0.321..0.321 rows=0 lo
ops=1)
-> Merge Join (cost=2.40..2.60 rows=13 width=54) (actual time=0.219..0.2
66 rows=13 loops=1)
Merge Cond: ("outer".codtab = "inner".coddiv)
-> Sort (cost=1.03..1.03 rows=2 width=22) (actual time=0.120..0.12
2 rows=2 loops=1)
Sort Key: ddiv.codtab
-> Seq Scan on td_div ddiv (cost=0.00..1.02 rows=2 width=22)
(actual time=0.016..0.021 rows=2 loops=1)
-> Sort (cost=1.37..1.40 rows=13 width=41) (actual time=0.075..0.0
83 rows=13 loops=1)
Sort Key: div.coddiv
-> Seq Scan on tt_div div (cost=0.00..1.13 rows=13 width=41)
(actual time=0.016..0.049 rows=13 loops=1)
-> Index Scan using ak_pro_tippro on tt_pro pro (cost=0.00..3.60 rows=1 width=622) (
actual time=0.016..0.018 rows=1 loops=32069)
Index Cond: ((pro.filmat = "outer".filmat) AND (pro.codmat = "outer".codmat))
SubPlan
-> Index Scan using ak_pre_gra on tt_pre pre (cost=1.01..4.47 rows=1 width=11) (ac
tual time=0.028..0.030 rows=1 loops=32069)
Index Cond: ((filpre = $4) AND (codpre = $5) AND (filmat = $6) AND (codmat = $
7) AND (codcor = $8) AND (codtam = $9))
InitPlan
-> Seq Scan on tt_cfg (cost=0.00..1.01 rows=1 width=17) (actual time=0.022
..0.024 rows=1 loops=1)
-> Seq Scan on td_med med4 (cost=0.00..1.15 rows=1 width=6) (actual time=0.003..0.
012 rows=1 loops=32069)
Filter: ($3 = codtab)
-> Seq Scan on td_med med3 (cost=0.00..1.15 rows=1 width=6) (actual time=0.003..0.
012 rows=1 loops=32069)
Filter: ($2 = codtab)
-> Seq Scan on td_med med2 (cost=0.00..1.15 rows=1 width=6) (actual time=0.003..0.
012 rows=1 loops=32069)
Filter: ($1 = codtab)
-> Seq Scan on td_med med1 (cost=0.00..1.15 rows=1 width=6) (actual time=0.004..0.
015 rows=1 loops=32069)
Filter: ($0 = codtab)
-> Hash (cost=3.44..3.44 rows=1 width=19) (actual time=0.106..0.106 rows=0 loops=1)
-> Index Scan using i_lc_dom_str on tt_dom sit (cost=0.00..3.44 rows=1 width=19) (actual time=0.077..0
.084 rows=2 loops=1)
Index Cond: ((codarq = 'IVE'::bpchar) AND ((nomcpo)::text = 'SITMOV'::text))
-> Index Scan using pk_ven on tt_ven ven (cost=0.00..3.92 rows=1 width=30) (actual time=0.089..0.092 rows=1 loops=
1)
Index Cond: (("outer".codfil = ven.codfil) AND ("outer".sequen = ven.sequen))
-> Index Scan using i_uq_ior_ive on tt_ior ior (cost=0.00..3.93 rows=1 width=38) (actual time=8.524..8.528 rows=1 loops=
1)
Index Cond: (("outer".codfil = ior.filive) AND ("outer".sequen = ior.seqive) AND ("outer".numite = ior.numive))
Total runtime: 6697.206 ms
(53 rows)
Reimer
pgsql-general by date: