Set statistics to 1000, reanalyzed and got exactly same results: noovo-new=# explain analyze SELECT "core_accessor"."id", "core_accessor"."content_type_id", "core_accessor"."object_id", "core_accessor"."ordering", "core_accessor"."label", "core_accessor"."date_posted", "core_accessor"."publish_state", "core_accessor"."nooximity_old", "core_accessor"."rising", "core_accessor"."nooximity", "core_accessor"."nooximity_old_date_posted", "core_accessor"."nooximity_date_posted", "core_accessor"."user_id", "core_accessor"."slot_id", "core_accessor"."slot_type_id", "core_accessor"."role", "core_base"."object_id", "core_base"."content_type_id", "core_base"."abstract", "core_base"."abstract_title", "core_base"."image", "core_base"."date_posted", "core_base"."date_modified", "core_base"."date_expires", "core_base"."publish_state", "core_base"."location", "core_base"."location_x", "core_base"."location_y", "core_base"."raw", "core_base"."author_id", "core_base"."excerpt", "core_base"."state_id", "core_base"."country_id", "core_base"."language", "core_base"."_identifier", "core_base"."slot_url", "core_base"."source_id", "core_base"."source_content_type_id", "core_base"."source_type", "core_base"."source_value", "core_base"."source_title", "core_base"."direct_to_source", "core_base"."comment_count", "core_base"."public" FROM "core_accessor" INNER JOIN core_base AS core_base ON core_base.content_type_id = core_accessor.content_type_id AND core_base.object_id = core_accessor.object_id WHERE (("core_accessor"."slot_type_id" = 119 AND "core_accessor"."slot_id" = 472 AND "core_accessor"."label" = E'' AND "core_accessor"."publish_state" >= 60 AND "core_accessor"."role" IN (0) AND "core_accessor"."user_id" = 0)) order by core_accessor.date_posted, core_accessor.nooximity LIMIT 5 ; QUERY PLAN --------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit (cost=31716.13..31716.14 rows=5 width=860) (actual time=711.340..711.343 rows=5 loops=1) -> Sort (cost=31716.13..31722.19 rows=2424 width=860) (actual time=711.339..711.339 rows=5 loops=1) Sort Key: core_accessor.date_posted, core_accessor.nooximity Sort Method: top-N heapsort Memory: 31kB -> Nested Loop (cost=0.00..31675.87 rows=2424 width=860) (actual time=0.076..544.039 rows=68505 loops=1) -> Index Scan using core_accessor_fresh_idx on core_accessor (cost=0.00..9234.77 rows=2511 width=92) (actual time=0.058..55.225 rows=69312 loops=1) Index Cond: ((slot_id = 472) AND (slot_type_id = 119) AND (label = ''::text) AND (user_id = 0) AND (role = 0) AND (publish_state >= 60)) -> Index Scan using core_base_pkey on core_base (cost=0.00..8.92 rows=1 width=768) (actual time=0.005..0.005 rows=1 loops=69312) Index Cond: ((core_base.object_id = core_accessor.object_id) AND (core_base.content_type_id = core_accessor.content_type_id)) Total runtime: 711.443 ms (10 rows) This is how I did it: noovo-new=# alter table core_accessor alter column slot_id set statistics 1000; ALTER TABLE noovo-new=# alter table core_accessor alter column slot_type_id set statistics 1000; ALTER TABLE noovo-new=# alter table core_accessor alter column label set statistics 1000; ALTER TABLE noovo-new=# alter table core_accessor alter column user_id set statistics 1000; ALTER TABLE noovo-new=# alter table core_accessor alter column role set statistics 1000; ALTER TABLE noovo-new=# alter table core_accessor alter column publish_state set statistics 1000; ALTER TABLE noovo-new=# analyze core_accessor; ANALYZE Sebastjan On Tue, Mar 3, 2009 at 6:34 PM, David Wilson <david.t.wilson@xxxxxxxxx> wrote: > On Tue, Mar 3, 2009 at 12:05 PM, Sebastjan Trepca <trepca@xxxxxxxxx> wrote: > >> -> Nested Loop (cost=0.00..31883.13 rows=2861 width=860) >> (actual time=0.089..543.497 rows=68505 loops=1) >> -> Index Scan using core_accessor_fresh_idx on >> core_accessor (cost=0.00..5460.07 rows=2970 width=92) (actual >> time=0.068..54.921 rows=69312 loops=1) >> Index Cond: ((slot_id = 472) AND (slot_type_id = >> 119) AND (label = ''::text) AND (user_id = 0) AND (role = 0) AND >> (publish_state >= 60)) > > That index scan on core_accessor_fresh_idx has a pretty big disparity > between what the planer expects to get (2970 rows) and what it > actually gets (69312 rows). You should try increasing the statistics > target if you haven't, then re-analyze and try the query again to see > if the planner picks something better. The default of 10 is pretty > small- try 100, or higher. > > > > -- > - David T. Wilson > david.t.wilson@xxxxxxxxx > -- Sent via pgsql-performance mailing list (pgsql-performance@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-performance