On 06/02/15 01:47, Josh Berkus wrote:
On 06/01/2015 03:22 PM, Tomas Vondra wrote:On 06/01/15 23:47, Josh Berkus wrote:On 06/01/2015 02:18 PM, Tom Lane wrote:Anybody else want to speak for or against back-patching the patch as posted? I intentionally didn't push it in before today's releases, but I will push it later this week if there are not objections.I would like Mark Wong to test this on DBT3, if that's possible for him. I'm very worried about an unanticipated regression.AFAIK Mark is busy with other stuff at the moment, but I can do the TPC-H (which DBT3 is equal to, IIRC).Yeah, I just want something which has a chance of catching unanticipated regression in queries which should be unaffected by the patch.
OK, so I did the testing today - with TPC-H and TPC-DS benchmarks. The results are good, IMHO.
With TPC-H, I've used 1GB and 4GB datasets, and I've seen no plan changes at all. I don't plan to run the tests on larger data sets, I do expect the behavior to remain the same, considering the uniformity of TPC-H data sets.
With TPC-DS (using the 63 queries supported by PostgreSQL), I've seen two cases of plan changes - see the plans attached. In both cases however the plan change results in much better performance. While on master the queries took 23 and 18 seconds, with the two patches it's only 7 and 3. This is just the 1GB dataset. I'll repeat the test with the 4GB dataset and post an update if there are any changes.
While this can't prove there are no regressions, in these two benchmarks the patches actually improve some of the queries.
regards -- Tomas Vondra http://www.2ndQuadrant.com PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Sort Sort Key: cs1.product_name, cs1.store_name, cs2.cnt CTE cs_ui -> HashAggregate Group Key: catalog_sales.cs_item_sk Filter: (sum(catalog_sales.cs_ext_list_price) > ('2'::numeric * sum(((catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge) + catalog_returns.cr_store_credit)))) -> Merge Join Merge Cond: (catalog_returns.cr_order_number = catalog_sales.cs_order_number) Join Filter: (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) -> Index Scan using idx_cr_order_number on catalog_returns -> Materialize -> Index Scan using idx_cs_order_number on catalog_sales CTE cross_sales -> HashAggregate Group Key: item.i_product_name, item.i_item_sk, store.s_store_name, store.s_zip, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip, d1.d_year, d2.d_year, d3.d_year -> Nested Loop -> Nested Loop -> Nested Loop Join Filter: (store_sales.ss_store_sk = store.s_store_sk) -> Nested Loop -> Nested Loop -> Nested Loop Join Filter: (cd1.cd_marital_status <> cd2.cd_marital_status) -> Nested Loop -> Nested Loop -> Nested Loop -> Nested Loop -> Nested Loop -> Nested Loop -> Nested Loop -> Nested Loop -> Nested Loop Join Filter: (item.i_item_sk = store_sales.ss_item_sk) -> Nested Loop Join Filter: (item.i_item_sk = store_returns.sr_item_sk) -> Nested Loop -> CTE Scan on cs_ui -> Index Scan using item_pkey on item Index Cond: (i_item_sk = cs_ui.cs_item_sk) Filter: ((i_current_price >= '79'::numeric) AND (i_current_price <= '89'::numeric) AND (i_current_price >= '80'::numeric) AND (i_current_price <= '94'::numeric) AND (i_color = ANY ('{navajo,burlywood,cornflower,olive,turquoise,linen}'::bpchar[]))) -> Bitmap Heap Scan on store_returns Recheck Cond: (sr_item_sk = cs_ui.cs_item_sk) -> Bitmap Index Scan on idx_sr_item_sk Index Cond: (sr_item_sk = cs_ui.cs_item_sk) -> Index Scan using store_sales_pkey on store_sales Index Cond: ((ss_item_sk = store_returns.sr_item_sk) AND (ss_ticket_number = store_returns.sr_ticket_number)) -> Index Scan using customer_address_pkey on customer_address ad1 Index Cond: (ca_address_sk = store_sales.ss_addr_sk) -> Index Scan using date_dim_pkey on date_dim d1 Index Cond: (d_date_sk = store_sales.ss_sold_date_sk) -> Index Scan using customer_pkey on customer Index Cond: (c_customer_sk = store_sales.ss_customer_sk) -> Index Scan using date_dim_pkey on date_dim d2 Index Cond: (d_date_sk = customer.c_first_sales_date_sk) -> Index Scan using customer_address_pkey on customer_address ad2 Index Cond: (ca_address_sk = customer.c_current_addr_sk) -> Index Scan using customer_demographics_pkey on customer_demographics cd1 Index Cond: (cd_demo_sk = store_sales.ss_cdemo_sk) -> Index Scan using date_dim_pkey on date_dim d3 Index Cond: (d_date_sk = customer.c_first_shipto_date_sk) -> Index Only Scan using promotion_pkey on promotion Index Cond: (p_promo_sk = store_sales.ss_promo_sk) -> Index Scan using customer_demographics_pkey on customer_demographics cd2 Index Cond: (cd_demo_sk = customer.c_current_cdemo_sk) -> Index Scan using household_demographics_pkey on household_demographics hd2 Index Cond: (hd_demo_sk = customer.c_current_hdemo_sk) -> Index Only Scan using income_band_pkey on income_band ib2 Index Cond: (ib_income_band_sk = hd2.hd_income_band_sk) -> Seq Scan on store -> Index Scan using household_demographics_pkey on household_demographics hd1 Index Cond: (hd_demo_sk = store_sales.ss_hdemo_sk) -> Index Only Scan using income_band_pkey on income_band ib1 Index Cond: (ib_income_band_sk = hd1.hd_income_band_sk) -> Nested Loop Join Filter: ((cs2.cnt <= cs1.cnt) AND (cs1.item_sk = cs2.item_sk) AND ((cs1.store_name)::text = (cs2.store_name)::text) AND (cs1.store_zip = cs2.store_zip)) -> CTE Scan on cross_sales cs1 Filter: (syear = 2001) -> CTE Scan on cross_sales cs2 Filter: (syear = 2002) (79 rows) QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit -> GroupAggregate Group Key: warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, ('DHL,ZOUROS'::text), date_dim.d_year -> Sort Sort Key: warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, ('DHL,ZOUROS'::text), date_dim.d_year -> Append -> HashAggregate Group Key: warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year -> Nested Loop -> Nested Loop -> Hash Join Hash Cond: (web_sales.ws_ship_mode_sk = ship_mode.sm_ship_mode_sk) -> Hash Join Hash Cond: (web_sales.ws_sold_date_sk = date_dim.d_date_sk) -> Seq Scan on web_sales -> Hash -> Seq Scan on date_dim Filter: (d_year = 1999) -> Hash -> Seq Scan on ship_mode Filter: (sm_carrier = ANY ('{DHL,ZOUROS}'::bpchar[])) -> Index Scan using time_dim_pkey on time_dim Index Cond: (t_time_sk = web_sales.ws_sold_time_sk) Filter: ((t_time >= 41070) AND (t_time <= 69870)) -> Index Scan using warehouse_pkey on warehouse Index Cond: (w_warehouse_sk = web_sales.ws_warehouse_sk) -> HashAggregate Group Key: warehouse_1.w_warehouse_name, warehouse_1.w_warehouse_sq_ft, warehouse_1.w_city, warehouse_1.w_county, warehouse_1.w_state, warehouse_1.w_country, date_dim_1.d_year -> Nested Loop -> Nested Loop -> Hash Join Hash Cond: (catalog_sales.cs_ship_mode_sk = ship_mode_1.sm_ship_mode_sk) -> Nested Loop -> Seq Scan on date_dim date_dim_1 Filter: (d_year = 1999) -> Index Scan using idx_cs_sold_date_sk on catalog_sales Index Cond: (cs_sold_date_sk = date_dim_1.d_date_sk) -> Hash -> Seq Scan on ship_mode ship_mode_1 Filter: (sm_carrier = ANY ('{DHL,ZOUROS}'::bpchar[])) -> Index Scan using time_dim_pkey on time_dim time_dim_1 Index Cond: (t_time_sk = catalog_sales.cs_sold_time_sk) Filter: ((t_time >= 41070) AND (t_time <= 69870)) -> Index Scan using warehouse_pkey on warehouse warehouse_1 Index Cond: (w_warehouse_sk = catalog_sales.cs_warehouse_sk) (45 rows)
tpcds-differences.sql
Description: application/sql
QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Sort (cost=113144.77..113144.77 rows=1 width=575) (actual time=7018.506..7018.511 rows=7 loops=1) Sort Key: cs1.product_name, cs1.store_name, cs2.cnt Sort Method: quicksort Memory: 26kB CTE cs_ui -> HashAggregate (cost=112389.78..112392.48 rows=108 width=29) (actual time=6865.789..6893.658 rows=17169 loops=1) Group Key: catalog_sales.cs_item_sk Filter: (sum(catalog_sales.cs_ext_list_price) > ('2'::numeric * sum(((catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge) + catalog_returns.cr_store_credit)))) Rows Removed by Filter: 693 -> Merge Join (cost=4.20..112387.35 rows=108 width=29) (actual time=0.085..6577.143 rows=144067 loops=1) Merge Cond: (catalog_returns.cr_order_number = catalog_sales.cs_order_number) Join Filter: (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) Rows Removed by Join Filter: 1310234 -> Index Scan using idx_cr_order_number on catalog_returns (cost=0.42..6642.37 rows=144067 width=26) (actual time=0.008..154.543 rows=144067 loops=1) -> Materialize (cost=0.43..78457.59 rows=1441548 width=15) (actual time=0.016..4329.797 rows=1977818 loops=1) -> Index Scan using idx_cs_order_number on catalog_sales (cost=0.43..74853.72 rows=1441548 width=15) (actual time=0.006..1544.435 rows=1441548 loops=1) CTE cross_sales -> HashAggregate (cost=752.19..752.21 rows=1 width=219) (actual time=7017.790..7017.892 rows=76 loops=1) Group Key: item.i_product_name, item.i_item_sk, store.s_store_name, store.s_zip, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip, d1.d_year, d2.d_year, d3.d_year -> Nested Loop (cost=8.68..752.14 rows=1 width=219) (actual time=6868.359..7017.513 rows=76 loops=1) -> Nested Loop (cost=8.53..751.96 rows=1 width=223) (actual time=6868.351..7017.041 rows=76 loops=1) -> Nested Loop (cost=8.24..751.65 rows=1 width=223) (actual time=6868.338..7016.345 rows=76 loops=1) Join Filter: (store_sales.ss_store_sk = store.s_store_sk) Rows Removed by Join Filter: 836 -> Nested Loop (cost=8.24..750.38 rows=1 width=170) (actual time=6868.318..7014.442 rows=76 loops=1) -> Nested Loop (cost=8.09..750.19 rows=1 width=174) (actual time=6868.288..7013.939 rows=76 loops=1) -> Nested Loop (cost=7.81..749.88 rows=1 width=174) (actual time=6868.267..7013.235 rows=76 loops=1) Join Filter: (cd1.cd_marital_status <> cd2.cd_marital_status) Rows Removed by Join Filter: 21 -> Nested Loop (cost=7.38..748.34 rows=1 width=180) (actual time=6868.240..7011.715 rows=98 loops=1) -> Nested Loop (cost=7.23..748.16 rows=1 width=184) (actual time=6868.190..7011.008 rows=99 loops=1) -> Nested Loop (cost=6.94..747.78 rows=1 width=184) (actual time=6868.182..7010.229 rows=99 loops=1) -> Nested Loop (cost=6.51..747.28 rows=1 width=186) (actual time=6868.158..7008.634 rows=99 loops=1) -> Nested Loop (cost=6.22..746.92 rows=1 width=150) (actual time=6868.145..7007.381 rows=99 loops=1) -> Nested Loop (cost=5.93..746.53 rows=1 width=150) (actual time=6867.993..7006.575 rows=106 loops=1) -> Nested Loop (cost=5.64..746.21 rows=1 width=134) (actual time=6867.976..7005.078 rows=107 loops=1) -> Nested Loop (cost=5.35..745.89 rows=1 width=134) (actual time=6867.961..7004.254 rows=110 loops=1) -> Nested Loop (cost=5.06..745.57 rows=1 width=98) (actual time=6867.945..7002.836 rows=117 loops=1) Join Filter: (item.i_item_sk = store_sales.ss_item_sk) -> Nested Loop (cost=4.63..724.34 rows=16 width=67) (actual time=6867.921..7001.417 rows=117 loops=1) Join Filter: (item.i_item_sk = store_returns.sr_item_sk) -> Nested Loop (cost=0.29..662.07 rows=1 width=59) (actual time=6867.874..7000.211 rows=8 loops=1) -> CTE Scan on cs_ui (cost=0.00..2.16 rows=108 width=4) (actual time=6865.792..6924.816 rows=17169 loops=1) -> Index Scan using item_pkey on item (cost=0.29..6.10 rows=1 width=55) (actual time=0.003..0.003 rows=0 loops=17169) Index Cond: (i_item_sk = cs_ui.cs_item_sk) Filter: ((i_current_price >= '79'::numeric) AND (i_current_price <= '89'::numeric) AND (i_current_price >= '80'::numeric) AND (i_current_price <= '94'::numeric) AND (i_color = ANY ('{navajo,burlywood,cornflower,olive,turquoise,linen}'::bpchar[]))) Rows Removed by Filter: 1 -> Bitmap Heap Scan on store_returns (cost=4.34..62.05 rows=18 width=8) (actual time=0.025..0.116 rows=15 loops=8) Recheck Cond: (sr_item_sk = cs_ui.cs_item_sk) Heap Blocks: exact=117 -> Bitmap Index Scan on idx_sr_item_sk (cost=0.00..4.34 rows=18 width=0) (actual time=0.017..0.017 rows=15 loops=8) Index Cond: (sr_item_sk = cs_ui.cs_item_sk) -> Index Scan using store_sales_pkey on store_sales (cost=0.43..1.31 rows=1 width=51) (actual time=0.007..0.008 rows=1 loops=117) Index Cond: ((ss_item_sk = store_returns.sr_item_sk) AND (ss_ticket_number = store_returns.sr_ticket_number)) -> Index Scan using customer_address_pkey on customer_address ad1 (cost=0.29..0.31 rows=1 width=44) (actual time=0.008..0.008 rows=1 loops=117) Index Cond: (ca_address_sk = store_sales.ss_addr_sk) -> Index Scan using date_dim_pkey on date_dim d1 (cost=0.29..0.31 rows=1 width=8) (actual time=0.003..0.004 rows=1 loops=110) Index Cond: (d_date_sk = store_sales.ss_sold_date_sk) -> Index Scan using customer_pkey on customer (cost=0.29..0.31 rows=1 width=24) (actual time=0.010..0.010 rows=1 loops=107) Index Cond: (c_customer_sk = store_sales.ss_customer_sk) -> Index Scan using date_dim_pkey on date_dim d2 (cost=0.29..0.37 rows=1 width=8) (actual time=0.003..0.004 rows=1 loops=106) Index Cond: (d_date_sk = customer.c_first_sales_date_sk) -> Index Scan using customer_address_pkey on customer_address ad2 (cost=0.29..0.36 rows=1 width=44) (actual time=0.008..0.009 rows=1 loops=99) Index Cond: (ca_address_sk = customer.c_current_addr_sk) -> Index Scan using customer_demographics_pkey on customer_demographics cd1 (cost=0.43..0.48 rows=1 width=6) (actual time=0.012..0.012 rows=1 loops=99) Index Cond: (cd_demo_sk = store_sales.ss_cdemo_sk) -> Index Scan using date_dim_pkey on date_dim d3 (cost=0.29..0.37 rows=1 width=8) (actual time=0.003..0.004 rows=1 loops=99) Index Cond: (d_date_sk = customer.c_first_shipto_date_sk) -> Index Only Scan using promotion_pkey on promotion (cost=0.15..0.17 rows=1 width=4) (actual time=0.003..0.004 rows=1 loops=99) Index Cond: (p_promo_sk = store_sales.ss_promo_sk) Heap Fetches: 98 -> Index Scan using customer_demographics_pkey on customer_demographics cd2 (cost=0.43..1.53 rows=1 width=6) (actual time=0.011..0.012 rows=1 loops=98) Index Cond: (cd_demo_sk = customer.c_current_cdemo_sk) -> Index Scan using household_demographics_pkey on household_demographics hd2 (cost=0.28..0.30 rows=1 width=8) (actual time=0.005..0.006 rows=1 loops=76) Index Cond: (hd_demo_sk = customer.c_current_hdemo_sk) -> Index Only Scan using income_band_pkey on income_band ib2 (cost=0.15..0.18 rows=1 width=4) (actual time=0.002..0.003 rows=1 loops=76) Index Cond: (ib_income_band_sk = hd2.hd_income_band_sk) Heap Fetches: 76 -> Seq Scan on store (cost=0.00..1.12 rows=12 width=61) (actual time=0.001..0.011 rows=12 loops=76) -> Index Scan using household_demographics_pkey on household_demographics hd1 (cost=0.28..0.30 rows=1 width=8) (actual time=0.005..0.005 rows=1 loops=76) Index Cond: (hd_demo_sk = store_sales.ss_hdemo_sk) -> Index Only Scan using income_band_pkey on income_band ib1 (cost=0.15..0.18 rows=1 width=4) (actual time=0.001..0.002 rows=1 loops=76) Index Cond: (ib_income_band_sk = hd1.hd_income_band_sk) Heap Fetches: 76 -> Nested Loop (cost=0.00..0.07 rows=1 width=575) (actual time=7018.046..7018.436 rows=7 loops=1) Join Filter: ((cs2.cnt <= cs1.cnt) AND (cs1.item_sk = cs2.item_sk) AND ((cs1.store_name)::text = (cs2.store_name)::text) AND (cs1.store_zip = cs2.store_zip)) Rows Removed by Join Filter: 128 -> CTE Scan on cross_sales cs1 (cost=0.00..0.02 rows=1 width=471) (actual time=7017.800..7017.822 rows=15 loops=1) Filter: (syear = 2001) Rows Removed by Filter: 61 -> CTE Scan on cross_sales cs2 (cost=0.00..0.02 rows=1 width=169) (actual time=0.007..0.031 rows=9 loops=15) Filter: (syear = 2002) Rows Removed by Filter: 67 Planning time: 93.424 ms Execution time: 7023.894 ms (94 rows) QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit (cost=72961.15..72971.77 rows=39 width=943) (actual time=3088.979..3089.100 rows=5 loops=1) -> GroupAggregate (cost=72961.15..72971.77 rows=39 width=943) (actual time=3088.975..3089.089 rows=5 loops=1) Group Key: warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, ('DHL,ZOUROS'::text), date_dim.d_year -> Sort (cost=72961.15..72961.24 rows=39 width=943) (actual time=3088.909..3088.919 rows=10 loops=1) Sort Key: warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, ('DHL,ZOUROS'::text), date_dim.d_year Sort Method: quicksort Memory: 30kB -> Append (cost=31066.32..72960.12 rows=39 width=943) (actual time=1723.163..3088.863 rows=10 loops=1) -> HashAggregate (cost=31066.32..31067.23 rows=13 width=165) (actual time=1723.160..1723.169 rows=5 loops=1) Group Key: warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year -> Nested Loop (cost=2340.04..31062.97 rows=13 width=165) (actual time=10.783..1684.279 rows=6160 loops=1) -> Nested Loop (cost=2339.89..31060.69 rows=13 width=30) (actual time=10.772..1646.487 rows=6160 loops=1) -> Hash Join (cost=2339.60..31047.66 rows=39 width=34) (actual time=10.614..1557.963 rows=14224 loops=1) Hash Cond: (web_sales.ws_ship_mode_sk = ship_mode.sm_ship_mode_sk) -> Hash Join (cost=2322.65..31016.92 rows=3574 width=38) (actual time=10.547..1422.411 rows=142857 loops=1) Hash Cond: (web_sales.ws_sold_date_sk = date_dim.d_date_sk) -> Seq Scan on web_sales (cost=0.00..25960.84 rows=719384 width=34) (actual time=0.006..657.219 rows=719384 loops=1) -> Hash (cost=2318.11..2318.11 rows=363 width=12) (actual time=10.527..10.527 rows=365 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 24kB -> Seq Scan on date_dim (cost=0.00..2318.11 rows=363 width=12) (actual time=4.803..10.200 rows=365 loops=1) Filter: (d_year = 1999) Rows Removed by Filter: 72684 -> Hash (cost=16.88..16.88 rows=6 width=4) (actual time=0.025..0.025 rows=2 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 9kB -> Seq Scan on ship_mode (cost=0.00..16.88 rows=6 width=4) (actual time=0.012..0.017 rows=2 loops=1) Filter: (sm_carrier = ANY ('{DHL,ZOUROS}'::bpchar[])) Rows Removed by Filter: 18 -> Index Scan using time_dim_pkey on time_dim (cost=0.29..0.32 rows=1 width=4) (actual time=0.003..0.004 rows=0 loops=14224) Index Cond: (t_time_sk = web_sales.ws_sold_time_sk) Filter: ((t_time >= 41070) AND (t_time <= 69870)) Rows Removed by Filter: 1 -> Index Scan using warehouse_pkey on warehouse (cost=0.15..0.17 rows=1 width=143) (actual time=0.001..0.003 rows=1 loops=6160) Index Cond: (w_warehouse_sk = web_sales.ws_warehouse_sk) -> HashAggregate (cost=41890.68..41892.50 rows=26 width=163) (actual time=1365.663..1365.672 rows=5 loops=1) Group Key: warehouse_1.w_warehouse_name, warehouse_1.w_warehouse_sq_ft, warehouse_1.w_city, warehouse_1.w_county, warehouse_1.w_state, warehouse_1.w_country, date_dim_1.d_year -> Nested Loop (cost=17.82..41883.99 rows=26 width=163) (actual time=3.428..1298.478 rows=12381 loops=1) -> Nested Loop (cost=17.67..41879.43 rows=26 width=28) (actual time=3.412..1225.926 rows=12395 loops=1) -> Hash Join (cost=17.38..41854.06 rows=77 width=32) (actual time=3.320..1069.584 rows=28822 loops=1) Hash Cond: (catalog_sales.cs_ship_mode_sk = ship_mode_1.sm_ship_mode_sk) -> Nested Loop (cost=0.43..41809.60 rows=7132 width=36) (actual time=3.253..803.104 rows=285693 loops=1) -> Seq Scan on date_dim date_dim_1 (cost=0.00..2318.11 rows=363 width=12) (actual time=3.225..6.889 rows=365 loops=1) Filter: (d_year = 1999) Rows Removed by Filter: 72684 -> Index Scan using idx_cs_sold_date_sk on catalog_sales (cost=0.43..100.95 rows=784 width=32) (actual time=0.006..0.805 rows=783 loops=365) Index Cond: (cs_sold_date_sk = date_dim_1.d_date_sk) -> Hash (cost=16.88..16.88 rows=6 width=4) (actual time=0.018..0.018 rows=2 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 9kB -> Seq Scan on ship_mode ship_mode_1 (cost=0.00..16.88 rows=6 width=4) (actual time=0.007..0.011 rows=2 loops=1) Filter: (sm_carrier = ANY ('{DHL,ZOUROS}'::bpchar[])) Rows Removed by Filter: 18 -> Index Scan using time_dim_pkey on time_dim time_dim_1 (cost=0.29..0.32 rows=1 width=4) (actual time=0.003..0.003 rows=0 loops=28822) Index Cond: (t_time_sk = catalog_sales.cs_sold_time_sk) Filter: ((t_time >= 41070) AND (t_time <= 69870)) Rows Removed by Filter: 1 -> Index Scan using warehouse_pkey on warehouse warehouse_1 (cost=0.15..0.17 rows=1 width=143) (actual time=0.001..0.002 rows=1 loops=12395) Index Cond: (w_warehouse_sk = catalog_sales.cs_warehouse_sk) Planning time: 2.178 ms Execution time: 3090.233 ms (57 rows)
QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Sort (cost=113144.77..113144.77 rows=1 width=575) (actual time=23789.637..23789.642 rows=7 loops=1) Sort Key: cs1.product_name, cs1.store_name, cs2.cnt Sort Method: quicksort Memory: 26kB CTE cs_ui -> HashAggregate (cost=112389.78..112392.48 rows=108 width=29) (actual time=7264.658..7336.579 rows=17169 loops=1) Group Key: catalog_sales.cs_item_sk Filter: (sum(catalog_sales.cs_ext_list_price) > ('2'::numeric * sum(((catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge) + catalog_returns.cr_store_credit)))) Rows Removed by Filter: 693 -> Merge Join (cost=4.20..112387.35 rows=108 width=29) (actual time=0.087..6960.681 rows=144067 loops=1) Merge Cond: (catalog_returns.cr_order_number = catalog_sales.cs_order_number) Join Filter: (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) Rows Removed by Join Filter: 1310234 -> Index Scan using idx_cr_order_number on catalog_returns (cost=0.42..6642.37 rows=144067 width=26) (actual time=0.007..204.316 rows=144067 loops=1) -> Materialize (cost=0.43..78457.59 rows=1441548 width=15) (actual time=0.019..4589.634 rows=1977818 loops=1) -> Index Scan using idx_cs_order_number on catalog_sales (cost=0.43..74853.72 rows=1441548 width=15) (actual time=0.007..1720.572 rows=1441548 loops=1) CTE cross_sales -> HashAggregate (cost=752.19..752.21 rows=1 width=219) (actual time=23788.889..23788.990 rows=76 loops=1) Group Key: item.i_product_name, item.i_item_sk, store.s_store_name, store.s_zip, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip, d1.d_year, d2.d_year, d3.d_year -> Nested Loop (cost=8.68..752.14 rows=1 width=219) (actual time=8681.978..23786.432 rows=76 loops=1) Join Filter: (store_sales.ss_store_sk = store.s_store_sk) Rows Removed by Join Filter: 836 -> Nested Loop (cost=8.68..750.87 rows=1 width=166) (actual time=8681.888..23776.431 rows=76 loops=1) -> Nested Loop (cost=8.53..750.69 rows=1 width=170) (actual time=8681.835..23773.583 rows=76 loops=1) -> Nested Loop (cost=8.24..750.37 rows=1 width=170) (actual time=8681.756..23768.853 rows=76 loops=1) Join Filter: (cd1.cd_marital_status <> cd2.cd_marital_status) Rows Removed by Join Filter: 21 -> Nested Loop (cost=7.82..749.88 rows=1 width=176) (actual time=8649.404..21604.055 rows=97 loops=1) -> Nested Loop (cost=7.66..749.69 rows=1 width=180) (actual time=8631.702..21582.785 rows=97 loops=1) -> Nested Loop (cost=7.38..749.38 rows=1 width=180) (actual time=8614.148..21560.747 rows=97 loops=1) -> Nested Loop (cost=7.09..749.00 rows=1 width=180) (actual time=8614.107..21515.457 rows=97 loops=1) -> Nested Loop (cost=6.80..748.61 rows=1 width=180) (actual time=8603.209..21277.084 rows=99 loops=1) -> Nested Loop (cost=6.51..748.25 rows=1 width=144) (actual time=8593.350..19998.566 rows=99 loops=1) -> Nested Loop (cost=6.08..746.71 rows=1 width=146) (actual time=8455.554..17878.994 rows=105 loops=1) -> Nested Loop (cost=5.79..746.38 rows=1 width=130) (actual time=8455.473..17130.226 rows=105 loops=1) -> Nested Loop (cost=5.49..746.06 rows=1 width=130) (actual time=8405.083..16989.052 rows=106 loops=1) -> Nested Loop (cost=5.35..745.89 rows=1 width=134) (actual time=8404.926..16983.270 rows=110 loops=1) -> Nested Loop (cost=5.06..745.57 rows=1 width=98) (actual time=8382.329..14967.267 rows=117 loops=1) Join Filter: (item.i_item_sk = store_sales.ss_item_sk) -> Nested Loop (cost=4.63..724.34 rows=16 width=67) (actual time=8346.904..14024.947 rows=117 loops=1) Join Filter: (item.i_item_sk = store_returns.sr_item_sk) -> Nested Loop (cost=0.29..662.07 rows=1 width=59) (actual time=8324.352..13618.106 rows=8 loops=1) -> CTE Scan on cs_ui (cost=0.00..2.16 rows=108 width=4) (actual time=7264.670..7424.096 rows=17169 loops=1) -> Index Scan using item_pkey on item (cost=0.29..6.10 rows=1 width=55) (actual time=0.356..0.356 rows=0 loops=17169) Index Cond: (i_item_sk = cs_ui.cs_item_sk) Filter: ((i_current_price >= '79'::numeric) AND (i_current_price <= '89'::numeric) AND (i_current_price >= '80'::numeric) AND (i_current_price <= '94'::numeric) AND (i_color = ANY ('{navajo,burlywood,cornflower,olive,turquoise,linen}'::bpchar[]))) Rows Removed by Filter: 1 -> Bitmap Heap Scan on store_returns (cost=4.34..62.05 rows=18 width=8) (actual time=32.525..50.662 rows=15 loops=8) Recheck Cond: (sr_item_sk = cs_ui.cs_item_sk) Heap Blocks: exact=117 -> Bitmap Index Scan on idx_sr_item_sk (cost=0.00..4.34 rows=18 width=0) (actual time=19.747..19.747 rows=15 loops=8) Index Cond: (sr_item_sk = cs_ui.cs_item_sk) -> Index Scan using store_sales_pkey on store_sales (cost=0.43..1.31 rows=1 width=51) (actual time=7.754..8.028 rows=1 loops=117) Index Cond: ((ss_item_sk = store_returns.sr_item_sk) AND (ss_ticket_number = store_returns.sr_ticket_number)) -> Index Scan using customer_address_pkey on customer_address ad1 (cost=0.29..0.31 rows=1 width=44) (actual time=17.202..17.207 rows=1 loops=117) Index Cond: (ca_address_sk = store_sales.ss_addr_sk) -> Index Only Scan using promotion_pkey on promotion (cost=0.15..0.17 rows=1 width=4) (actual time=0.022..0.028 rows=1 loops=110) Index Cond: (p_promo_sk = store_sales.ss_promo_sk) Heap Fetches: 106 -> Index Scan using date_dim_pkey on date_dim d1 (cost=0.29..0.31 rows=1 width=8) (actual time=1.305..1.311 rows=1 loops=106) Index Cond: (d_date_sk = store_sales.ss_sold_date_sk) -> Index Scan using customer_pkey on customer (cost=0.29..0.31 rows=1 width=24) (actual time=7.105..7.109 rows=1 loops=105) Index Cond: (c_customer_sk = store_sales.ss_customer_sk) -> Index Scan using customer_demographics_pkey on customer_demographics cd2 (cost=0.43..1.53 rows=1 width=6) (actual time=20.157..20.162 rows=1 loops=105) Index Cond: (cd_demo_sk = customer.c_current_cdemo_sk) -> Index Scan using customer_address_pkey on customer_address ad2 (cost=0.29..0.36 rows=1 width=44) (actual time=12.882..12.887 rows=1 loops=99) Index Cond: (ca_address_sk = customer.c_current_addr_sk) -> Index Scan using date_dim_pkey on date_dim d2 (cost=0.29..0.37 rows=1 width=8) (actual time=2.378..2.383 rows=1 loops=99) Index Cond: (d_date_sk = customer.c_first_sales_date_sk) -> Index Scan using date_dim_pkey on date_dim d3 (cost=0.29..0.37 rows=1 width=8) (actual time=0.442..0.447 rows=1 loops=97) Index Cond: (d_date_sk = customer.c_first_shipto_date_sk) -> Index Scan using household_demographics_pkey on household_demographics hd1 (cost=0.28..0.30 rows=1 width=8) (actual time=0.202..0.207 rows=1 loops=97) Index Cond: (hd_demo_sk = store_sales.ss_hdemo_sk) -> Index Only Scan using income_band_pkey on income_band ib1 (cost=0.15..0.18 rows=1 width=4) (actual time=0.194..0.200 rows=1 loops=97) Index Cond: (ib_income_band_sk = hd1.hd_income_band_sk) Heap Fetches: 97 -> Index Scan using customer_demographics_pkey on customer_demographics cd1 (cost=0.43..0.48 rows=1 width=6) (actual time=22.287..22.293 rows=1 loops=97) Index Cond: (cd_demo_sk = store_sales.ss_cdemo_sk) -> Index Scan using household_demographics_pkey on household_demographics hd2 (cost=0.28..0.30 rows=1 width=8) (actual time=0.033..0.038 rows=1 loops=76) Index Cond: (hd_demo_sk = customer.c_current_hdemo_sk) -> Index Only Scan using income_band_pkey on income_band ib2 (cost=0.15..0.18 rows=1 width=4) (actual time=0.011..0.017 rows=1 loops=76) Index Cond: (ib_income_band_sk = hd2.hd_income_band_sk) Heap Fetches: 76 -> Seq Scan on store (cost=0.00..1.12 rows=12 width=61) (actual time=0.009..0.057 rows=12 loops=76) -> Nested Loop (cost=0.00..0.07 rows=1 width=575) (actual time=23789.143..23789.569 rows=7 loops=1) Join Filter: ((cs2.cnt <= cs1.cnt) AND (cs1.item_sk = cs2.item_sk) AND ((cs1.store_name)::text = (cs2.store_name)::text) AND (cs1.store_zip = cs2.store_zip)) Rows Removed by Join Filter: 128 -> CTE Scan on cross_sales cs1 (cost=0.00..0.02 rows=1 width=471) (actual time=23788.898..23788.929 rows=15 loops=1) Filter: (syear = 2001) Rows Removed by Filter: 61 -> CTE Scan on cross_sales cs2 (cost=0.00..0.02 rows=1 width=169) (actual time=0.007..0.032 rows=9 loops=15) Filter: (syear = 2002) Rows Removed by Filter: 67 Planning time: 94.034 ms Execution time: 23795.694 ms (94 rows) QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit (cost=73267.53..73278.15 rows=39 width=943) (actual time=18554.196..18554.656 rows=5 loops=1) -> GroupAggregate (cost=73267.53..73278.15 rows=39 width=943) (actual time=18554.189..18554.611 rows=5 loops=1) Group Key: warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, ('DHL,ZOUROS'::text), date_dim.d_year -> Sort (cost=73267.53..73267.62 rows=39 width=943) (actual time=18553.957..18553.999 rows=10 loops=1) Sort Key: warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, ('DHL,ZOUROS'::text), date_dim.d_year Sort Method: quicksort Memory: 30kB -> Append (cost=31372.69..73266.49 rows=39 width=943) (actual time=16762.044..18553.850 rows=10 loops=1) -> HashAggregate (cost=31372.69..31373.60 rows=13 width=165) (actual time=16762.042..16762.051 rows=5 loops=1) Group Key: warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year -> Nested Loop (cost=17.68..31369.35 rows=13 width=165) (actual time=87.227..16630.424 rows=6160 loops=1) -> Nested Loop (cost=17.54..31367.07 rows=13 width=30) (actual time=73.828..16509.931 rows=6160 loops=1) -> Nested Loop (cost=17.24..31354.04 rows=39 width=34) (actual time=20.265..6491.836 rows=14224 loops=1) -> Hash Join (cost=16.95..28753.93 rows=7845 width=30) (actual time=20.253..5627.307 rows=71949 loops=1) Hash Cond: (web_sales.ws_ship_mode_sk = ship_mode.sm_ship_mode_sk) -> Seq Scan on web_sales (cost=0.00..25960.84 rows=719384 width=34) (actual time=0.010..3678.740 rows=719384 loops=1) -> Hash (cost=16.88..16.88 rows=6 width=4) (actual time=20.216..20.216 rows=2 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 9kB -> Seq Scan on ship_mode (cost=0.00..16.88 rows=6 width=4) (actual time=20.202..20.206 rows=2 loops=1) Filter: (sm_carrier = ANY ('{DHL,ZOUROS}'::bpchar[])) Rows Removed by Filter: 18 -> Index Scan using date_dim_pkey on date_dim (cost=0.29..0.32 rows=1 width=12) (actual time=0.006..0.006 rows=0 loops=71949) Index Cond: (d_date_sk = web_sales.ws_sold_date_sk) Filter: (d_year = 1999) Rows Removed by Filter: 1 -> Index Scan using time_dim_pkey on time_dim (cost=0.29..0.32 rows=1 width=4) (actual time=0.696..0.697 rows=0 loops=14224) Index Cond: (t_time_sk = web_sales.ws_sold_time_sk) Filter: ((t_time >= 41070) AND (t_time <= 69870)) Rows Removed by Filter: 1 -> Index Scan using warehouse_pkey on warehouse (cost=0.15..0.17 rows=1 width=143) (actual time=0.007..0.009 rows=1 loops=6160) Index Cond: (w_warehouse_sk = web_sales.ws_warehouse_sk) -> HashAggregate (cost=41890.68..41892.50 rows=26 width=163) (actual time=1791.696..1791.746 rows=5 loops=1) Group Key: warehouse_1.w_warehouse_name, warehouse_1.w_warehouse_sq_ft, warehouse_1.w_city, warehouse_1.w_county, warehouse_1.w_state, warehouse_1.w_country, date_dim_1.d_year -> Nested Loop (cost=17.82..41883.99 rows=26 width=163) (actual time=205.068..1724.879 rows=12381 loops=1) -> Nested Loop (cost=17.67..41879.43 rows=26 width=28) (actual time=205.045..1652.281 rows=12395 loops=1) -> Hash Join (cost=17.38..41854.06 rows=77 width=32) (actual time=204.605..1458.539 rows=28822 loops=1) Hash Cond: (catalog_sales.cs_ship_mode_sk = ship_mode_1.sm_ship_mode_sk) -> Nested Loop (cost=0.43..41809.60 rows=7132 width=36) (actual time=204.313..1191.777 rows=285693 loops=1) -> Seq Scan on date_dim date_dim_1 (cost=0.00..2318.11 rows=363 width=12) (actual time=187.581..370.425 rows=365 loops=1) Filter: (d_year = 1999) Rows Removed by Filter: 72684 -> Index Scan using idx_cs_sold_date_sk on catalog_sales (cost=0.43..100.95 rows=784 width=32) (actual time=0.051..0.864 rows=783 loops=365) Index Cond: (cs_sold_date_sk = date_dim_1.d_date_sk) -> Hash (cost=16.88..16.88 rows=6 width=4) (actual time=0.073..0.073 rows=2 loops=1) Buckets: 1024 Batches: 1 Memory Usage: 9kB -> Seq Scan on ship_mode ship_mode_1 (cost=0.00..16.88 rows=6 width=4) (actual time=0.023..0.041 rows=2 loops=1) Filter: (sm_carrier = ANY ('{DHL,ZOUROS}'::bpchar[])) Rows Removed by Filter: 18 -> Index Scan using time_dim_pkey on time_dim time_dim_1 (cost=0.29..0.32 rows=1 width=4) (actual time=0.004..0.004 rows=0 loops=28822) Index Cond: (t_time_sk = catalog_sales.cs_sold_time_sk) Filter: ((t_time >= 41070) AND (t_time <= 69870)) Rows Removed by Filter: 1 -> Index Scan using warehouse_pkey on warehouse warehouse_1 (cost=0.15..0.17 rows=1 width=143) (actual time=0.001..0.002 rows=1 loops=12395) Index Cond: (w_warehouse_sk = catalog_sales.cs_warehouse_sk) Planning time: 2.152 ms Execution time: 18556.204 ms (55 rows)
QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Sort Sort Key: cs1.product_name, cs1.store_name, cs2.cnt CTE cs_ui -> HashAggregate Group Key: catalog_sales.cs_item_sk Filter: (sum(catalog_sales.cs_ext_list_price) > ('2'::numeric * sum(((catalog_returns.cr_refunded_cash + catalog_returns.cr_reversed_charge) + catalog_returns.cr_store_credit)))) -> Merge Join Merge Cond: (catalog_returns.cr_order_number = catalog_sales.cs_order_number) Join Filter: (catalog_sales.cs_item_sk = catalog_returns.cr_item_sk) -> Index Scan using idx_cr_order_number on catalog_returns -> Materialize -> Index Scan using idx_cs_order_number on catalog_sales CTE cross_sales -> HashAggregate Group Key: item.i_product_name, item.i_item_sk, store.s_store_name, store.s_zip, ad1.ca_street_number, ad1.ca_street_name, ad1.ca_city, ad1.ca_zip, ad2.ca_street_number, ad2.ca_street_name, ad2.ca_city, ad2.ca_zip, d1.d_year, d2.d_year, d3.d_year -> Nested Loop Join Filter: (store_sales.ss_store_sk = store.s_store_sk) -> Nested Loop -> Nested Loop -> Nested Loop Join Filter: (cd1.cd_marital_status <> cd2.cd_marital_status) -> Nested Loop -> Nested Loop -> Nested Loop -> Nested Loop -> Nested Loop -> Nested Loop -> Nested Loop -> Nested Loop -> Nested Loop -> Nested Loop -> Nested Loop Join Filter: (item.i_item_sk = store_sales.ss_item_sk) -> Nested Loop Join Filter: (item.i_item_sk = store_returns.sr_item_sk) -> Nested Loop -> CTE Scan on cs_ui -> Index Scan using item_pkey on item Index Cond: (i_item_sk = cs_ui.cs_item_sk) Filter: ((i_current_price >= '79'::numeric) AND (i_current_price <= '89'::numeric) AND (i_current_price >= '80'::numeric) AND (i_current_price <= '94'::numeric) AND (i_color = ANY ('{navajo,burlywood,cornflower,olive,turquoise,linen}'::bpchar[]))) -> Bitmap Heap Scan on store_returns Recheck Cond: (sr_item_sk = cs_ui.cs_item_sk) -> Bitmap Index Scan on idx_sr_item_sk Index Cond: (sr_item_sk = cs_ui.cs_item_sk) -> Index Scan using store_sales_pkey on store_sales Index Cond: ((ss_item_sk = store_returns.sr_item_sk) AND (ss_ticket_number = store_returns.sr_ticket_number)) -> Index Scan using customer_address_pkey on customer_address ad1 Index Cond: (ca_address_sk = store_sales.ss_addr_sk) -> Index Only Scan using promotion_pkey on promotion Index Cond: (p_promo_sk = store_sales.ss_promo_sk) -> Index Scan using date_dim_pkey on date_dim d1 Index Cond: (d_date_sk = store_sales.ss_sold_date_sk) -> Index Scan using customer_pkey on customer Index Cond: (c_customer_sk = store_sales.ss_customer_sk) -> Index Scan using customer_demographics_pkey on customer_demographics cd2 Index Cond: (cd_demo_sk = customer.c_current_cdemo_sk) -> Index Scan using customer_address_pkey on customer_address ad2 Index Cond: (ca_address_sk = customer.c_current_addr_sk) -> Index Scan using date_dim_pkey on date_dim d2 Index Cond: (d_date_sk = customer.c_first_sales_date_sk) -> Index Scan using date_dim_pkey on date_dim d3 Index Cond: (d_date_sk = customer.c_first_shipto_date_sk) -> Index Scan using household_demographics_pkey on household_demographics hd1 Index Cond: (hd_demo_sk = store_sales.ss_hdemo_sk) -> Index Only Scan using income_band_pkey on income_band ib1 Index Cond: (ib_income_band_sk = hd1.hd_income_band_sk) -> Index Scan using customer_demographics_pkey on customer_demographics cd1 Index Cond: (cd_demo_sk = store_sales.ss_cdemo_sk) -> Index Scan using household_demographics_pkey on household_demographics hd2 Index Cond: (hd_demo_sk = customer.c_current_hdemo_sk) -> Index Only Scan using income_band_pkey on income_band ib2 Index Cond: (ib_income_band_sk = hd2.hd_income_band_sk) -> Seq Scan on store -> Nested Loop Join Filter: ((cs2.cnt <= cs1.cnt) AND (cs1.item_sk = cs2.item_sk) AND ((cs1.store_name)::text = (cs2.store_name)::text) AND (cs1.store_zip = cs2.store_zip)) -> CTE Scan on cross_sales cs1 Filter: (syear = 2001) -> CTE Scan on cross_sales cs2 Filter: (syear = 2002) (79 rows) QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Limit -> GroupAggregate Group Key: warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, ('DHL,ZOUROS'::text), date_dim.d_year -> Sort Sort Key: warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, ('DHL,ZOUROS'::text), date_dim.d_year -> Append -> HashAggregate Group Key: warehouse.w_warehouse_name, warehouse.w_warehouse_sq_ft, warehouse.w_city, warehouse.w_county, warehouse.w_state, warehouse.w_country, date_dim.d_year -> Nested Loop -> Nested Loop -> Nested Loop -> Hash Join Hash Cond: (web_sales.ws_ship_mode_sk = ship_mode.sm_ship_mode_sk) -> Seq Scan on web_sales -> Hash -> Seq Scan on ship_mode Filter: (sm_carrier = ANY ('{DHL,ZOUROS}'::bpchar[])) -> Index Scan using date_dim_pkey on date_dim Index Cond: (d_date_sk = web_sales.ws_sold_date_sk) Filter: (d_year = 1999) -> Index Scan using time_dim_pkey on time_dim Index Cond: (t_time_sk = web_sales.ws_sold_time_sk) Filter: ((t_time >= 41070) AND (t_time <= 69870)) -> Index Scan using warehouse_pkey on warehouse Index Cond: (w_warehouse_sk = web_sales.ws_warehouse_sk) -> HashAggregate Group Key: warehouse_1.w_warehouse_name, warehouse_1.w_warehouse_sq_ft, warehouse_1.w_city, warehouse_1.w_county, warehouse_1.w_state, warehouse_1.w_country, date_dim_1.d_year -> Nested Loop -> Nested Loop -> Hash Join Hash Cond: (catalog_sales.cs_ship_mode_sk = ship_mode_1.sm_ship_mode_sk) -> Nested Loop -> Seq Scan on date_dim date_dim_1 Filter: (d_year = 1999) -> Index Scan using idx_cs_sold_date_sk on catalog_sales Index Cond: (cs_sold_date_sk = date_dim_1.d_date_sk) -> Hash -> Seq Scan on ship_mode ship_mode_1 Filter: (sm_carrier = ANY ('{DHL,ZOUROS}'::bpchar[])) -> Index Scan using time_dim_pkey on time_dim time_dim_1 Index Cond: (t_time_sk = catalog_sales.cs_sold_time_sk) Filter: ((t_time >= 41070) AND (t_time <= 69870)) -> Index Scan using warehouse_pkey on warehouse warehouse_1 Index Cond: (w_warehouse_sk = catalog_sales.cs_warehouse_sk) (44 rows)
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers