[email protected] writes:
> When I query this through pgsql, the queries are fast as expected.
> select * from push_topic where guid = 'DD748CCD-B8A4-3B9F-8F60-67F1F673CFE5'
> Index Scan using push_topic_idx_topicguid on push_topic (cost=0.42..8.44
> rows=1 width=103) (actual time=0.117..0.121 rows=1 loops=1)
> Index Cond: ((guid)::bpchar =
> 'DD748CCD-B8A4-3B9F-8F60-67F1F673CFE5'::bpchar)
> Buffers: shared hit=3 read=1
> Total runtime: 0.191 ms
> However when I run the exact query through a different application
> (CodeSynthesis ORM) the query is very slow (~ 115ms logged)
> I noted this is due to a sequential scan happening on the table instead of an
> index scan.
It looks like what that app is actually issuing is something different
from what you tested by hand, to wit
select * from push_topic where guid =
'DD748CCD-B8A4-3B9F-8F60-67F1F673CFE5'::text
which causes the comparison to be resolved as texteq not bpchareq, ie you
effectively have
select * from push_topic where guid::text =
'DD748CCD-B8A4-3B9F-8F60-67F1F673CFE5'::text
and that doesn't match a bpchar index. If you can't persuade the app to
label the comparison value as bpchar not text, the easiest fix would be
to create an additional index on "guid::text".
regards, tom lane
--
Sent via pgsql-performance mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-performance