Re: Speed difference between != and = operators?

From: Paul Caskey <paul(at)nmxs(dot)com>
To: Postgres Users <pgsql-general(at)postgresql(dot)org>
Subject: Re: Speed difference between != and = operators?
Date: 2000-07-31 20:07:57
Message-ID: 3985DC9D.6B5C868A@nmxs.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Paul Caskey wrote:
>
> This query takes 206 seconds:
>
> SELECT t1.blah, t1.foo, t2.id
> FROM t1, t2, t3
> WHERE t1.SessionId = 427
> AND t1.CatalogId = 22
> AND t1.CatalogId = t3.CatalogId
> AND t2.id = t3.SomeId
> AND t2.Active != 0
>
> If I change the last line to this, it takes 1 second:
>
> AND t2.Active = 1
>
> The "Active" field is 0 or 1. The query returns the same rows, either way
> (about 1700 rows). There is an index on the Active field.
>
> These two queries both take 1 second:
>
> SELECT * FROM t2 WHERE Active = 1;
> SELECT * FROM t2 WHERE Active != 0;
>
> Any ideas? Possible bug?

My coworker adds:

Interesting note... when you change the operator the way you
said you get a completely different query plan:

Original: (Active != 0)

Nested Loop (cost=0.00..143.49 rows=1 width=20)
-> Nested Loop (cost=0.00..141.46 rows=1 width=12)
-> Seq Scan on t2 (cost=0.00..48.11 rows=1 width=4)
-> Seq Scan on t3 (cost=0.00..71.50 rows=1748 width=8)
-> Index Scan using idx1 on t3 (cost=0.00..2.02 rows=1 width=8)

Altered: (Active = 1)

Nested Loop (cost=5.06..272.65 rows=62 width=20)
-> Hash Join (cost=5.06..146.49 rows=62 width=16)
-> Seq Scan on t3 (cost=0.00..71.49 rows=1748 width=8)
-> Hash (cost=5.05..5.05 rows=4 width=8)
-> Index Scan using idx1 on t1 (cost=0.00..5.05 rows=4
width=8)
-> Index Scan using t2_pkey on t2 (cost=0.00..2.02 rows=1 width=4)

What's odd is the maximum cost is low in both cases, but is even lower in
the query than runs 200 times slower.

--
Paul Caskey paul(at)nmxs(dot)com Software Engineer
New Mexico Software 5041 Indian School NE Albuquerque, NM 87110
--

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Tom Lane 2000-07-31 20:09:29 Re: How I can undelete recodes?
Previous Message Fetter, David M 2000-07-31 20:03:58 postgres access via perl failing after upgrade