Mario Splivalo <mario.splivalo@xxxxxxxxxx> writes: > So, it is the same. When I do EXPLAIN ANALYZE EXECUTE I get completely > different execution plan: > ... > -> Bitmap Heap Scan on messages > (cost=287.98..21192.42 rows=12848 width=4) (actual time=0.049..0.169 > rows=62 loops=1) > Recheck Cond: (service_id = $1) > -> Bitmap Index Scan on > messages_uq__service_id__tan (cost=0.00..284.77 rows=12848 width=0) > (actual time=0.038..0.038 rows=62 loops=1) > Index Cond: (service_id = $1) Well, there's the problem: without knowing what the specific service_id is, the planner is estimating 12848 matching rows, which is evidently off by a couple of orders of magnitude. And that's pushing it to adopt a hash join instead of a nestloop. Are you sure the stats on this table are up to date? Maybe you need to increase the stats target? regards, tom lane -- Sent via pgsql-performance mailing list (pgsql-performance@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-performance