Hello David,
Thank you for your reply.
> Thanks for running that again. I see from the EXPLAIN ANALYZE output
> that the planner did cost the Result Cache plan slightly more
> expensive than the Hash Join plan. It's likely that add_path() did
> not consider the Hash Join plan to be worth keeping because it was not
> more than 1% better than the Result Cache plan. STD_FUZZ_FACTOR is set
> so new paths need to be at least 1% better than existing paths for
> them to be kept. That's pretty unfortunate and that alone does not
> mean the costs are incorrect. It would be good to know if that's the
> case for the other queries too.
Thanks for your analysis. I understood why HashJoin was not selected
in this query plan.
> To test that, I've set up TPC-DS locally, however, it would be good if
> you could send me the list of indexes that you've created. I see the
> tool from the transaction processing council for TPC-DS only comes
> with the list of tables.
>
> Can you share the output of:
I listed all indexes on my machine by executing your query. I attached
the result to this e-mail. I hope it will help you.
Best regards,
Yuya Watari
pg_get_indexdef
----------------------------------------------------------------------------------------------------------------------------
CREATE UNIQUE INDEX customer_address_pkey ON public.customer_address USING
btree (ca_address_sk)
CREATE UNIQUE INDEX customer_demographics_pkey ON public.customer_demographics
USING btree (cd_demo_sk)
CREATE UNIQUE INDEX date_dim_pkey ON public.date_dim USING btree (d_date_sk)
CREATE UNIQUE INDEX ship_mode_pkey ON public.ship_mode USING btree
(sm_ship_mode_sk)
CREATE UNIQUE INDEX time_dim_pkey ON public.time_dim USING btree (t_time_sk)
CREATE UNIQUE INDEX reason_pkey ON public.reason USING btree (r_reason_sk)
CREATE UNIQUE INDEX income_band_pkey ON public.income_band USING btree
(ib_income_band_sk)
CREATE UNIQUE INDEX item_pkey ON public.item USING btree (i_item_sk)
CREATE UNIQUE INDEX store_pkey ON public.store USING btree (s_store_sk)
CREATE INDEX store_s_closed_date_sk_idx ON public.store USING btree
(s_closed_date_sk)
CREATE INDEX call_center_cc_closed_date_sk_idx ON public.call_center USING
btree (cc_closed_date_sk)
CREATE INDEX call_center_cc_open_date_sk_idx ON public.call_center USING btree
(cc_open_date_sk)
CREATE UNIQUE INDEX call_center_pkey ON public.call_center USING btree
(cc_call_center_sk)
CREATE INDEX customer_c_current_cdemo_sk_idx ON public.customer USING btree
(c_current_cdemo_sk)
CREATE UNIQUE INDEX customer_pkey ON public.customer USING btree
(c_customer_sk)
CREATE INDEX customer_c_first_shipto_date_sk_idx ON public.customer USING
btree (c_first_shipto_date_sk)
CREATE INDEX customer_c_first_sales_date_sk_idx ON public.customer USING btree
(c_first_sales_date_sk)
CREATE INDEX customer_c_current_hdemo_sk_idx ON public.customer USING btree
(c_current_hdemo_sk)
CREATE INDEX customer_c_current_addr_sk_idx ON public.customer USING btree
(c_current_addr_sk)
CREATE INDEX store_returns_sr_store_sk_idx ON public.store_returns USING btree
(sr_store_sk)
CREATE INDEX store_returns_sr_return_time_sk_idx ON public.store_returns USING
btree (sr_return_time_sk)
CREATE INDEX store_returns_sr_returned_date_sk_idx ON public.store_returns
USING btree (sr_returned_date_sk)
CREATE INDEX store_returns_sr_reason_sk_idx ON public.store_returns USING
btree (sr_reason_sk)
CREATE INDEX store_returns_sr_item_sk_idx ON public.store_returns USING btree
(sr_item_sk)
CREATE INDEX store_returns_sr_hdemo_sk_idx ON public.store_returns USING btree
(sr_hdemo_sk)
CREATE INDEX store_returns_sr_customer_sk_idx ON public.store_returns USING
btree (sr_customer_sk)
CREATE INDEX store_returns_sr_cdemo_sk_idx ON public.store_returns USING btree
(sr_cdemo_sk)
CREATE INDEX store_returns_sr_addr_sk_idx ON public.store_returns USING btree
(sr_addr_sk)
CREATE UNIQUE INDEX store_returns_pkey ON public.store_returns USING btree
(sr_item_sk, sr_ticket_number)
CREATE UNIQUE INDEX household_demographics_pkey ON
public.household_demographics USING btree (hd_demo_sk)
CREATE INDEX household_demographics_hd_income_band_sk_idx ON
public.household_demographics USING btree (hd_income_band_sk)
CREATE UNIQUE INDEX promotion_pkey ON public.promotion USING btree (p_promo_sk)
CREATE INDEX promotion_p_end_date_sk_idx ON public.promotion USING btree
(p_end_date_sk)
CREATE INDEX promotion_p_start_date_sk_idx ON public.promotion USING btree
(p_start_date_sk)
CREATE INDEX promotion_p_item_sk_idx ON public.promotion USING btree
(p_item_sk)
CREATE UNIQUE INDEX catalog_page_pkey ON public.catalog_page USING btree
(cp_catalog_page_sk)
CREATE INDEX catalog_page_cp_end_date_sk_idx ON public.catalog_page USING
btree (cp_end_date_sk)
CREATE INDEX catalog_page_cp_start_date_sk_idx ON public.catalog_page USING
btree (cp_start_date_sk)
CREATE INDEX inventory_inv_item_sk_idx ON public.inventory USING btree
(inv_item_sk)
CREATE INDEX inventory_inv_date_sk_idx ON public.inventory USING btree
(inv_date_sk)
CREATE INDEX inventory_inv_warehouse_sk_idx ON public.inventory USING btree
(inv_warehouse_sk)
CREATE UNIQUE INDEX inventory_pkey ON public.inventory USING btree
(inv_date_sk, inv_item_sk, inv_warehouse_sk)
CREATE INDEX catalog_returns_cr_returning_cdemo_sk_idx ON
public.catalog_returns USING btree (cr_returning_cdemo_sk)
CREATE INDEX catalog_returns_cr_returning_addr_sk_idx ON
public.catalog_returns USING btree (cr_returning_addr_sk)
CREATE INDEX catalog_returns_cr_returned_time_sk_idx ON public.catalog_returns
USING btree (cr_returned_time_sk)
CREATE INDEX catalog_returns_cr_returned_date_sk_idx ON public.catalog_returns
USING btree (cr_returned_date_sk)
CREATE INDEX catalog_returns_cr_refunded_hdemo_sk_idx ON
public.catalog_returns USING btree (cr_refunded_hdemo_sk)
CREATE UNIQUE INDEX catalog_returns_pkey ON public.catalog_returns USING btree
(cr_item_sk, cr_order_number)
CREATE INDEX catalog_returns_cr_refunded_customer_sk_idx ON
public.catalog_returns USING btree (cr_refunded_customer_sk)
CREATE INDEX catalog_returns_cr_returning_customer_sk_idx ON
public.catalog_returns USING btree (cr_returning_customer_sk)
CREATE INDEX catalog_returns_cr_refunded_cdemo_sk_idx ON
public.catalog_returns USING btree (cr_refunded_cdemo_sk)
CREATE INDEX catalog_returns_cr_refunded_addr_sk_idx ON public.catalog_returns
USING btree (cr_refunded_addr_sk)
CREATE INDEX catalog_returns_cr_reason_sk_idx ON public.catalog_returns USING
btree (cr_reason_sk)
CREATE INDEX catalog_returns_cr_item_sk_idx ON public.catalog_returns USING
btree (cr_item_sk)
CREATE INDEX catalog_returns_cr_catalog_page_sk_idx ON public.catalog_returns
USING btree (cr_catalog_page_sk)
CREATE INDEX catalog_returns_cr_call_center_sk_idx ON public.catalog_returns
USING btree (cr_call_center_sk)
CREATE INDEX catalog_returns_cr_warehouse_sk_idx ON public.catalog_returns
USING btree (cr_warehouse_sk)
CREATE INDEX catalog_returns_cr_ship_mode_sk_idx ON public.catalog_returns
USING btree (cr_ship_mode_sk)
CREATE INDEX catalog_returns_cr_returning_hdemo_sk_idx ON
public.catalog_returns USING btree (cr_returning_hdemo_sk)
CREATE UNIQUE INDEX catalog_sales_pkey ON public.catalog_sales USING btree
(cs_item_sk, cs_order_number)
CREATE INDEX catalog_sales_cs_ship_customer_sk_idx ON public.catalog_sales
USING btree (cs_ship_customer_sk)
CREATE INDEX catalog_sales_cs_bill_cdemo_sk_idx ON public.catalog_sales USING
btree (cs_bill_cdemo_sk)
CREATE INDEX catalog_sales_cs_bill_customer_sk_idx ON public.catalog_sales
USING btree (cs_bill_customer_sk)
CREATE INDEX catalog_sales_cs_bill_hdemo_sk_idx ON public.catalog_sales USING
btree (cs_bill_hdemo_sk)
CREATE INDEX catalog_sales_cs_call_center_sk_idx ON public.catalog_sales USING
btree (cs_call_center_sk)
CREATE INDEX catalog_sales_cs_catalog_page_sk_idx ON public.catalog_sales
USING btree (cs_catalog_page_sk)
CREATE INDEX catalog_sales_cs_item_sk_idx ON public.catalog_sales USING btree
(cs_item_sk)
CREATE INDEX catalog_sales_cs_promo_sk_idx ON public.catalog_sales USING btree
(cs_promo_sk)
CREATE INDEX catalog_sales_cs_ship_addr_sk_idx ON public.catalog_sales USING
btree (cs_ship_addr_sk)
CREATE INDEX catalog_sales_cs_ship_cdemo_sk_idx ON public.catalog_sales USING
btree (cs_ship_cdemo_sk)
CREATE INDEX catalog_sales_cs_bill_addr_sk_idx ON public.catalog_sales USING
btree (cs_bill_addr_sk)
CREATE INDEX catalog_sales_cs_ship_date_sk_idx ON public.catalog_sales USING
btree (cs_ship_date_sk)
CREATE INDEX catalog_sales_cs_ship_hdemo_sk_idx ON public.catalog_sales USING
btree (cs_ship_hdemo_sk)
CREATE INDEX catalog_sales_cs_ship_mode_sk_idx ON public.catalog_sales USING
btree (cs_ship_mode_sk)
CREATE INDEX catalog_sales_cs_sold_date_sk_idx ON public.catalog_sales USING
btree (cs_sold_date_sk)
CREATE INDEX catalog_sales_cs_sold_time_sk_idx ON public.catalog_sales USING
btree (cs_sold_time_sk)
CREATE INDEX catalog_sales_cs_warehouse_sk_idx ON public.catalog_sales USING
btree (cs_warehouse_sk)
CREATE INDEX store_sales_ss_promo_sk_idx ON public.store_sales USING btree
(ss_promo_sk)
CREATE INDEX store_sales_ss_item_sk_idx ON public.store_sales USING btree
(ss_item_sk)
CREATE INDEX store_sales_ss_hdemo_sk_idx ON public.store_sales USING btree
(ss_hdemo_sk)
CREATE INDEX store_sales_ss_customer_sk_idx ON public.store_sales USING btree
(ss_customer_sk)
CREATE INDEX store_sales_ss_cdemo_sk_idx ON public.store_sales USING btree
(ss_cdemo_sk)
CREATE INDEX store_sales_ss_addr_sk_idx ON public.store_sales USING btree
(ss_addr_sk)
CREATE UNIQUE INDEX store_sales_pkey ON public.store_sales USING btree
(ss_item_sk, ss_ticket_number)
CREATE INDEX store_sales_ss_sold_date_sk_idx ON public.store_sales USING btree
(ss_sold_date_sk)
CREATE INDEX store_sales_ss_sold_time_sk_idx ON public.store_sales USING btree
(ss_sold_time_sk)
CREATE INDEX store_sales_ss_store_sk_idx ON public.store_sales USING btree
(ss_store_sk)
(87 rows)