Re: Nested loop performance - Mailing list pgsql-performance
From | Nick Fankhauser |
---|---|
Subject | Re: Nested loop performance |
Date | |
Msg-id | NEBBLAAHGLEEPCGOBHDGIEPAKBAA.nickf@ontko.com Whole thread Raw |
In response to | Re: Nested loop performance (Stephan Szabo <sszabo@megazone.bigpanda.com>) |
List | pgsql-performance |
> As a question, what does explain analyze give you if you > set enable_nestloop=false; before trying the query? Here are the results- It looks quite a bit more painful than the other plan, although the wall time is in the same ballpark. alpha=# explain analyze alpha-# select alpha-# min(actor.actor_id) as actor_id, alpha-# min(actor.actor_entity_type) as actor_entity_type, alpha-# min(actor.role_class_code) as role_class_code, alpha-# min(actor.actor_full_name) as actor_full_name, alpha-# min(actor.actor_person_date_of_birth) as actor_person_date_of_birth, alpha-# min(actor.actor_entity_acronym) as actor_entity_acronym, alpha-# min(actor.actor_person_last_name) as actor_person_last_name, alpha-# min(actor.actor_person_first_name) as actor_person_first_name, alpha-# min(actor.actor_person_middle_name) as actor_person_middle_name, alpha-# min(actor.actor_person_name_suffix) as actor_person_name_suffix, alpha-# min(actor.actor_person_place_of_birth) as actor_person_place_of_birth, alpha-# min(actor.actor_person_height) as actor_person_height, alpha-# min(actor.actor_person_height_unit) as actor_person_height_unit, alpha-# min(actor.actor_person_weight) as actor_person_weight, alpha-# min(actor.actor_person_weight_unit) as actor_person_weight_unit, alpha-# min(actor.actor_person_ethnicity) as actor_person_ethnicity, alpha-# min(actor.actor_person_citizenship_count) as actor_person_citizenship_count, alpha-# min(actor.actor_person_hair_color) as actor_person_hair_color, alpha-# min(actor.actor_person_scars_marks_tatto) as actor_person_scars_marks_tatto, alpha-# min(actor.actor_person_marital_status) as actor_person_marital_status, alpha-# min(actor.actor_alias_for_actor_id) as actor_alias_for_actor_id, alpha-# min(to_char(data_source.source_last_update, 'MM/DD/YYYY HH12:MI AM TZ')) as last_update, alpha-# min(actor_summary.single_case_public_id) as case_public_id, alpha-# min(actor_summary.single_case_id) as case_id, alpha-# sum(actor_summary.case_count)as case_count alpha-# from alpha-# actor, alpha-# actor_summary, alpha-# data_source alpha-# where alpha-# actor.actor_id = actor_summary.actor_id alpha-# and data_source.source_id = actor.source_id alpha-# and actor.actor_full_name_uppercase like upper('sanders%') alpha-# group by alpha-# actor.actor_id alpha-# order by alpha-# min(actor.actor_full_name_uppercase), alpha-# case_count desc, alpha-# min(actor_summary.case_disp_global_code) alpha-# limit alpha-# 1000; QUERY PLAN ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- ---------------- ---------------------- Limit (cost=168919.98..168920.03 rows=20 width=548) (actual time=91247.95..91249.05 rows=1000 loops=1) -> Sort (cost=168919.98..168920.03 rows=20 width=548) (actual time=91247.95..91248.35 rows=1001 loops=1) Sort Key: min((actor.actor_full_name_uppercase)::text), sum(actor_summary.case_count), min((actor_summary.case_disp_global_code)::text) -> Aggregate (cost=168904.95..168919.54 rows=20 width=548) (actual time=91015.00..91164.68 rows=3590 loops=1) -> Group (cost=168904.95..168905.95 rows=201 width=548) (actual time=90999.87..91043.25 rows=3594 loops=1) -> Sort (cost=168904.95..168905.45 rows=201 width=548) (actual time=90999.83..91001.57 rows=3594 loops=1) Sort Key: actor.actor_id -> Hash Join (cost=903.08..168897.24 rows=201 width=548) (actual time=25470.63..90983.45 rows=3594 loops=1) Hash Cond: ("outer".actor_id = "inner".actor_id) -> Seq Scan on actor_summary (cost=0.00..150715.43 rows=3455243 width=73) (actual time=8.03..52902.24 rows=3455243 loops=1) -> Hash (cost=902.57..902.57 rows=204 width=475) (actual time=25459.92..25459.92 rows=0 loops=1) -> Hash Join (cost=1.14..902.57 rows=204 width=475) (actual time=155.92..25451.25 rows=3639 loops=1) Hash Cond: ("outer".source_id = "inner".source_id) -> Index Scan using actor_full_name_uppercase on actor (cost=0.00..897.20 rows=223 width=463) (actual time=144.93..25404. 10 rows=3639 loops=1) Index Cond: ((actor_full_name_uppercase >= 'SANDERS'::character varying) AND (actor_full_name_uppercase < 'SANDERT':: character varying)) Filter: (actor_full_name_uppercase ~~ 'SANDERS%'::text) -> Hash (cost=1.11..1.11 rows=11 width=12) (actual time=10.66..10.66 rows=0 loops=1) -> Seq Scan on data_source (cost=0.00..1.11 rows=11 width=12) (actual time=10.63..10.64 rows=11 loops=1) Total runtime: 91275.18 msec (19 rows) alpha=#
pgsql-performance by date: