slow query - Mailing list pgsql-general
From | Marc |
---|---|
Subject | slow query |
Date | |
Msg-id | 809128960712211110r8654ff4l1b33c3fe64a65b65@mail.gmail.com Whole thread Raw |
Responses |
Re: slow query
[TLM] Re: slow query |
List | pgsql-general |
Hey Folks,
This query is running really slowly. Sometimes much slower then others. I have a feeling that there may be contention on one of the indices it is using.
Query and explain plan are below. Seems like it spend the most time doing
Index Scan using i_tablea_atextfield on tablea ru (cost=0.00..2265.28 rows=2 width=12) (actual time=0.624..881.313 rows=228 loops=1)
Any suggestions?
SELECT z.atextfield,
z.btextfield,
z.abigintfield,
p.achar255field, p.ptextfield,
z.achar1field, u.aboolfield,
z.textfield1,
z.achar8field,
z.achar16field
FROM tablea ru
INNER JOIN tableb u ON ( u.atextfield = ru.anothertextfield )
INNER JOIN tablec z ON u.atextfield = z.atextfield
INNER JOIN tabled p ON p.id = z.pid
LEFT JOIN tablee m ON u.atextfield = m.atextfield AND m.boolcol5
WHERE ru.atextfield = 'thelookupval'
AND u.boolcol1 IS TRUE
AND u.boolcol2 IS FALSE
AND ru.achar1field <> 'N'
AND ru.boolcol3 IS FALSE
AND NOT EXISTS ( SELECT 'x' FROM tablea fru WHERE fru.atextfield = ru.anothertextfield AND fru.boolcol3 IS TRUE )
AND EXISTS ( SELECT 'x' FROM tablef s WHERE s.atextfield = ru.atextfield AND s.boolcol4 IS TRUE )
ORDER by ru.anothertextfield asc
Sort (cost=2341.96..2341.97 rows=2 width=146) (actual time=1118.810..1119.098 rows=228 loops=1)
Sort Key: ru.anothertextfield
-> Nested Loop Left Join (cost=0.00..2341.95 rows=2 width=146) (actual time= 0.930..1117.258 rows=228 loops=1)
-> Nested Loop (cost=0.00..2313.36 rows=2 width=131) (actual time=0.842..914.554 rows=228 loops=1)
-> Nested Loop (cost=0.00..2296.65 rows=2 width=93) (actual time= 0.765..901.916 rows=228 loops=1)
-> Nested Loop (cost=0.00..2281.98 rows=2 width=72) (actual time=0.690..893.648 rows=228 loops=1)
-> Index Scan using i_tablea_atextfield on tablea ru (cost= 0.00..2265.28 rows=2 width=12) (actual time=0.624..881.313 rows=228 loops=1)
Index Cond: (atextfield = 'thelookupval'::text)
Filter: ((achar1field <> 'N'::bpchar) AND (boolcol3 IS FALSE) AND (NOT (subplan)) AND (subplan))
SubPlan
-> Index Scan using tablef_pkey on tablef s (cost=0.00..8.34 rows=1 width=0) (actual time=0.016..0.016 rows=1 loops=228)
Index Cond: (atextfield = $1)
Filter: (boolcol4 IS TRUE)
-> Bitmap Heap Scan on tablea fru (cost=4.61..90.41 rows=1 width=0) (actual time=3.590..3.590 rows=0 loops=243)
Recheck Cond: (atextfield = $0)
Filter: (boolcol3 IS TRUE)
-> Bitmap Index Scan on i_tablea_atextfield (cost= 0.00..4.61 rows=22 width=0) (actual time=0.044..0.044 rows=17 loops=243)
Index Cond: (atextfield = $0)
-> Index Scan using tablec_pkey on tablec z (cost= 0.00..8.34 rows=1 width=60) (actual time=0.047..0.049 rows=1 loops=228)
Index Cond: (z.atextfield = ru.anothertextfield)
-> Index Scan using tabled_pkey on tabled p (cost= 0.00..7.32 rows=1 width=29) (actual time=0.030..0.031 rows=1 loops=228)
Index Cond: (p.id = z.pid)
-> Index Scan using tableb_pkey on tableb u (cost= 0.00..8.34 rows=1 width=38) (actual time=0.049..0.051 rows=1 loops=228)
Index Cond: (u.atextfield = ru.anothertextfield)
Filter: ((boolcol1 IS TRUE) AND (boolcol2" IS FALSE))"
-> Index Scan using tablee_atextfield_idx on tablee m (cost=0.00..14.28 rows=1 width=39) (actual time=0.883..0.883 rows=0 loops=228)
Index Cond: (u.atextfield = m.atextfield)
This query is running really slowly. Sometimes much slower then others. I have a feeling that there may be contention on one of the indices it is using.
Query and explain plan are below. Seems like it spend the most time doing
Index Scan using i_tablea_atextfield on tablea ru (cost=0.00..2265.28 rows=2 width=12) (actual time=0.624..881.313 rows=228 loops=1)
Any suggestions?
SELECT z.atextfield,
z.btextfield,
z.abigintfield,
p.achar255field, p.ptextfield,
z.achar1field, u.aboolfield,
z.textfield1,
z.achar8field,
z.achar16field
FROM tablea ru
INNER JOIN tableb u ON ( u.atextfield = ru.anothertextfield )
INNER JOIN tablec z ON u.atextfield = z.atextfield
INNER JOIN tabled p ON p.id = z.pid
LEFT JOIN tablee m ON u.atextfield = m.atextfield AND m.boolcol5
WHERE ru.atextfield = 'thelookupval'
AND u.boolcol1 IS TRUE
AND u.boolcol2 IS FALSE
AND ru.achar1field <> 'N'
AND ru.boolcol3 IS FALSE
AND NOT EXISTS ( SELECT 'x' FROM tablea fru WHERE fru.atextfield = ru.anothertextfield AND fru.boolcol3 IS TRUE )
AND EXISTS ( SELECT 'x' FROM tablef s WHERE s.atextfield = ru.atextfield AND s.boolcol4 IS TRUE )
ORDER by ru.anothertextfield asc
Sort (cost=2341.96..2341.97 rows=2 width=146) (actual time=1118.810..1119.098 rows=228 loops=1)
Sort Key: ru.anothertextfield
-> Nested Loop Left Join (cost=0.00..2341.95 rows=2 width=146) (actual time= 0.930..1117.258 rows=228 loops=1)
-> Nested Loop (cost=0.00..2313.36 rows=2 width=131) (actual time=0.842..914.554 rows=228 loops=1)
-> Nested Loop (cost=0.00..2296.65 rows=2 width=93) (actual time= 0.765..901.916 rows=228 loops=1)
-> Nested Loop (cost=0.00..2281.98 rows=2 width=72) (actual time=0.690..893.648 rows=228 loops=1)
-> Index Scan using i_tablea_atextfield on tablea ru (cost= 0.00..2265.28 rows=2 width=12) (actual time=0.624..881.313 rows=228 loops=1)
Index Cond: (atextfield = 'thelookupval'::text)
Filter: ((achar1field <> 'N'::bpchar) AND (boolcol3 IS FALSE) AND (NOT (subplan)) AND (subplan))
SubPlan
-> Index Scan using tablef_pkey on tablef s (cost=0.00..8.34 rows=1 width=0) (actual time=0.016..0.016 rows=1 loops=228)
Index Cond: (atextfield = $1)
Filter: (boolcol4 IS TRUE)
-> Bitmap Heap Scan on tablea fru (cost=4.61..90.41 rows=1 width=0) (actual time=3.590..3.590 rows=0 loops=243)
Recheck Cond: (atextfield = $0)
Filter: (boolcol3 IS TRUE)
-> Bitmap Index Scan on i_tablea_atextfield (cost= 0.00..4.61 rows=22 width=0) (actual time=0.044..0.044 rows=17 loops=243)
Index Cond: (atextfield = $0)
-> Index Scan using tablec_pkey on tablec z (cost= 0.00..8.34 rows=1 width=60) (actual time=0.047..0.049 rows=1 loops=228)
Index Cond: (z.atextfield = ru.anothertextfield)
-> Index Scan using tabled_pkey on tabled p (cost= 0.00..7.32 rows=1 width=29) (actual time=0.030..0.031 rows=1 loops=228)
Index Cond: (p.id = z.pid)
-> Index Scan using tableb_pkey on tableb u (cost= 0.00..8.34 rows=1 width=38) (actual time=0.049..0.051 rows=1 loops=228)
Index Cond: (u.atextfield = ru.anothertextfield)
Filter: ((boolcol1 IS TRUE) AND (boolcol2" IS FALSE))"
-> Index Scan using tablee_atextfield_idx on tablee m (cost=0.00..14.28 rows=1 width=39) (actual time=0.883..0.883 rows=0 loops=228)
Index Cond: (u.atextfield = m.atextfield)
pgsql-general by date: