From: | Andrew Jaimes <andrewjaimes(at)hotmail(dot)com> |
---|---|
To: | <pgsql-performance(at)postgresql(dot)org> |
Subject: | Sequencial scan in a JOIN |
Date: | 2012-06-05 12:48:41 |
Message-ID: | BLU161-W1125BE7D5AED110518DEFFDD0C0@phx.gbl |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-performance |
Hi everyone,
I am trying to run the following query:
SELECT count(1) --DISTINCT l_userqueue.queueid
FROM e_usersessions
JOIN l_userqueue
ON l_userqueue.userid = e_usersessions.entityid
JOIN a_activity
ON a_activity.activequeueid = l_userqueue.queueid
AND a_activity.vstatus = 1
AND a_activity.ventrydate > 0
AND a_activity.sbuid = e_usersessions.sbuid
AND a_activity.assignedtoid = 0
AND a_activity.status <> '0'
WHERE e_usersessions.sessionkeepalivedatetime > 20120605082131943
Explain analyze:
'Aggregate (cost=100402.10..100402.11 rows=1 width=0) (actual time=2249.051..2249.051 rows=1 loops=1)'
' -> Hash Join (cost=10.93..99795.09 rows=242803 width=0) (actual time=0.541..2249.027 rows=33 loops=1)'
' Hash Cond: ((a_activity.activequeueid = l_userqueue.queueid) AND (a_activity.sbuid = e_usersessions.sbuid))'
' -> Seq Scan on a_activity (cost=0.00..88462.52 rows=1208167 width=22) (actual time=0.010..1662.142 rows=1207855 loops=1)'
' Filter: ((ventrydate > 0) AND ((status)::text <> '0'::text) AND (vstatus = 1) AND (assignedtoid = 0::numeric))'
' -> Hash (cost=10.86..10.86 rows=5 width=22) (actual time=0.053..0.053 rows=4 loops=1)'
' -> Hash Join (cost=9.38..10.86 rows=5 width=22) (actual time=0.033..0.048 rows=4 loops=1)'
' Hash Cond: (l_userqueue.userid = e_usersessions.entityid)'
' -> Seq Scan on l_userqueue (cost=0.00..1.23 rows=23 width=27) (actual time=0.003..0.009 rows=23 loops=1)'
' -> Hash (cost=9.31..9.31 rows=5 width=21) (actual time=0.018..0.018 rows=2 loops=1)'
' -> Index Scan using i06_e_usersessions on e_usersessions (cost=0.00..9.31 rows=5 width=21) (actual time=0.009..0.012 rows=2 loops=1)'
' Index Cond: (sessionkeepalivedatetime > 20120605082131943::bigint)'
'Total runtime: 2249.146 ms'
I am trying to understand the reason why the a sequencial scan is used on a_activity instead of using the index by activequeueid (i08_a_activity). If I run the this other query, I get a complete different results:
SELECT *
FROM a_activity
WHERE a_activity.activequeueid = 123456
AND a_activity.vstatus = 1
AND a_activity.ventrydate > 0
Explain analyze:
'Index Scan using i08_a_activity on a_activity (cost=0.00..303.57 rows=162 width=7287) (actual time=0.019..0.019 rows=0 loops=1)'
' Index Cond: ((activequeueid = 123456::numeric) AND (vstatus = 1) AND (ventrydate > 0))'
'Total runtime: 0.076 ms'
This is the definition of the index :
CREATE INDEX i08_a_activity
ON a_activity
USING btree
(activequeueid , vstatus , ventrydate );
a_activity table has 1,216,134 rows
Thanks in advance,
Andrew
From | Date | Subject | |
---|---|---|---|
Next Message | Shaun Thomas | 2012-06-05 13:15:45 | Re: Sequencial scan in a JOIN |
Previous Message | Trevor Campbell | 2012-06-05 03:49:24 | Re: Trouble with plan statistics for behaviour for query. |