Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Data Bases > Pgsql Performance > Re: Subquery WH...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 13 of 13 Topic 4137 of 4352
Post > Topic >>

Re: Subquery WHERE IN or WHERE EXISTS faster?

by sgrodriguez@[EMAIL PROTECTED] ("Sergio Gabriel Rodriguez") Jul 5, 2008 at 09:14 AM

Hi Ulrich, do you try with

SELECT p.speed FROM processor p
           INNER JOIN users_processors up ON p.id=up.processorid
           AND up.userid=1
?
Or your question is only about IN and EXIST?

regards,

Sergio Gabriel Rodriguez
Corrientes - Argentina
http://www.3trex.com.ar

On Sat, Jun 28, 2008 at 7:07 PM, Ulrich <ulrich.mierendorff@[EMAIL PROTECTED]
>
wrote:
> Hi,
> I have added a bit of dummy Data, 100000 processors, 10000 users, each
user
> got around 12 processors.
>
> I have tested both queries. First of all, I was surprised that it is
that
> fast :) Here are the results:
>
>
> EXPLAIN ANALYZE SELECT speed FROM processors WHERE id IN (SELECT
processorid
> FROM users_processors WHERE userid=4040) ORDER BY speed ASC LIMIT 10
OFFSET
> 1;
>
> Limit  (cost=113.73..113.75 rows=7 width=5) (actual time=0.335..0.340
> rows=10 loops=1)
>  ->  Sort  (cost=113.73..113.75 rows=8 width=5) (actual
time=0.332..0.333
> rows=11 loops=1)
>        Sort Key: processors.speed
>        Sort Method:  quicksort  Memory: 17kB
>        ->  Nested Loop  (cost=47.22..113.61 rows=8 width=5) (actual
> time=0.171..0.271 rows=13 loops=1)
>              ->  HashAggregate  (cost=47.22..47.30 rows=8 width=4)
(actual
> time=0.148..0.154 rows=13 loops=1)
>                    ->  Bitmap Heap Scan on users_processors
>  (cost=4.36..47.19 rows=12 width=4) (actual time=0.074..0.117 rows=13
> loops=1)
>                          Recheck Cond: (userid = 4040)
>                          ->  Bitmap Index Scan on
> users_processors_userid_index  (cost=0.00..4.35 rows=12 width=0) (actual
> time=0.056..0.056 rows=13 loops=1)
>                                Index Cond: (userid = 4040)
>              ->  Index Scan using processors_pkey on processors
>  (cost=0.00..8.28 rows=1 width=9) (actual time=0.006..0.007 rows=1
loops=13)
>                    Index Cond: (processors.id =
> users_processors.processorid)
> Total runtime: 0.471 ms
> (13 rows)
>
> ___________
>
> EXPLAIN ANALYZE SELECT speed FROM processors WHERE EXISTS (SELECT 1 FROM
> users_processors WHERE userid=4040 AND processorid=processors.id) ORDER
BY
> speed ASC LIMIT 10 OFFSET 1;
>
> Limit  (cost=831413.86..831413.89 rows=10 width=5) (actual
> time=762.475..762.482 rows=10 loops=1)
>  ->  Sort  (cost=831413.86..831538.86 rows=50000 width=5) (actual
> time=762.471..762.473 rows=11 loops=1)
>        Sort Key: processors.speed
>        Sort Method:  quicksort  Memory: 17kB
>        ->  Seq Scan on processors  (cost=0.00..830299.00 rows=50000
width=5)
> (actual time=313.591..762.411 rows=13 loops=1)
>              Filter: (subplan)
>              SubPlan
>                ->  Index Scan using users_processors_pkey on
> users_processors  (cost=0.00..8.29 rows=1 width=0) (actual
time=0.006..0.006
> rows=0 loops=100000)
>                      Index Cond: ((userid = 4040) AND (processorid =
$0))
> Total runtime: 762.579 ms
> (10 rows)
>
>
>
>
> As you can see the second query is much slower. First I thought "Just a
> difference of 0.3ms?", but then I realized that it was 762ms not 0.762
;-).
> Both queries return the same result, so I will use #1 and count(*) takes
> just 0.478ms if I use query #1.
>
> Kind Regards,
> Ulrich
>
> Tom Lane wrote:
>>
>> Ulrich <ulrich.mierendorff@[EMAIL PROTECTED]
> writes:
>>
>>>
>>> People say that [EXISTS is faster]
>>>
>>
>> People who say that are not reliable authorities, at least as far as
>> Postgres is concerned.  But it is always a bad idea to extrapolate
>> results on toy tables to large tables --- quite aside from measurement
>> noise and caching issues, the planner might pick a different plan when
>> faced with large tables.  Load up a realistic amount of data and then
>> see what you get.
>>
>>                        regards, tom lane
>>
>>
>
>
> --
> Sent via pgsql-performance mailing list
(pgsql-performance@[EMAIL PROTECTED]
)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-performance
>

-- 
Sent via pgsql-performance mailing list (pgsql-performance@[EMAIL PROTECTED]
)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance
 




 13 Posts in Topic:
Subquery WHERE IN or WHERE EXISTS faster?
ulrich.mierendorff@[EMAIL  2008-06-28 17:22:41 
Re: Subquery WHERE IN or WHERE EXISTS faster?
tgl@[EMAIL PROTECTED] (T  2008-06-28 11:53:43 
Re: Subquery WHERE IN or WHERE EXISTS faster?
ulrich.mierendorff@[EMAIL  2008-06-29 00:07:32 
Re: Subquery WHERE IN or WHERE EXISTS faster?
rconover@[EMAIL PROTECTED  2008-06-30 00:50:27 
Re: Subquery WHERE IN or WHERE EXISTS faster?
ulrich.mierendorff@[EMAIL  2008-06-30 09:29:08 
Re: Subquery WHERE IN or WHERE EXISTS faster?
rconover@[EMAIL PROTECTED  2008-06-30 01:44:45 
Re: Subquery WHERE IN or WHERE EXISTS faster?
stark@[EMAIL PROTECTED]   2008-06-29 00:01:08 
Re: Subquery WHERE IN or WHERE EXISTS faster?
ulrich.mierendorff@[EMAIL  2008-06-29 12:15:25 
Re: Subquery WHERE IN or WHERE EXISTS faster?
stark@[EMAIL PROTECTED]   2008-06-29 13:08:57 
Re: Subquery WHERE IN or WHERE EXISTS faster?
jcasanov@[EMAIL PROTECTED  2008-06-29 23:33:57 
Re: Subquery WHERE IN or WHERE EXISTS faster?
tgl@[EMAIL PROTECTED] (T  2008-06-30 00:48:44 
Re: Subquery WHERE IN or WHERE EXISTS faster?
sgrodriguez@[EMAIL PROTEC  2008-07-05 09:02:18 
Re: Subquery WHERE IN or WHERE EXISTS faster?
sgrodriguez@[EMAIL PROTEC  2008-07-05 09:14:05 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Sun Oct 12 21:10:21 CDT 2008.