I continue struggling with the TPC-R benchmarks and wonder if anyone could help me optimize the query below. ANALYZE statistics indicate that the query should run relatively fast, but it takes hours to complete. I attached the query plan to this posting. Thanks.
select nation, o_year, sum(amount) as sum_profit from ( select n_name as nation, extract(year from o_orderdate) as o_year, l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity as amount from part, supplier, lineitem, partsupp, orders, nation where s_suppkey = l_suppkey and ps_suppkey = l_suppkey and ps_partkey = l_partkey and p_partkey = l_partkey and o_orderkey = l_orderkey and s_nationkey = n_nationkey and p_name like '%aquamarine%' ) as profit group by nation, o_year order by nation, o_year desc; ************************************* This e-mail may contain privileged or confidential material intended for the named recipient only. If you are not the named recipient, delete this message and all attachments. Unauthorized reviewing, copying, printing, disclosing, or otherwise using information in this e-mail is prohibited. We reserve the right to monitor e-mail sent through our network. *************************************
QUERY PLAN ------------------------------------------------------------------------------------------------------------------------------------------------ Subquery Scan "temp" (cost=18237.40..18237.41 rows=1 width=121) -> Sort (cost=18237.40..18237.41 rows=1 width=121) Sort Key: nation.n_name, date_part('year'::text, orders.o_orderdate) -> Aggregate (cost=18237.38..18237.39 rows=1 width=121) -> Group (cost=18237.38..18237.39 rows=1 width=121) -> Sort (cost=18237.38..18237.38 rows=1 width=121) Sort Key: nation.n_name, date_part('year'::text, orders.o_orderdate) -> Nested Loop (cost=18232.96..18237.37 rows=1 width=121) -> Hash Join (cost=18232.96..18234.34 rows=1 width=109) Hash Cond: ("outer".n_nationkey = "inner".s_nationkey) -> Seq Scan on nation (cost=0.00..1.25 rows=25 width=33) -> Hash (cost=18232.95..18232.95 rows=1 width=76) -> Nested Loop (cost=0.00..18232.95 rows=1 width=76) Join Filter: ("inner".s_suppkey = "outer".l_suppkey) -> Nested Loop (cost=0.00..18229.93 rows=1 width=68) Join Filter: ("outer".p_partkey = "inner".l_partkey) -> Nested Loop (cost=0.00..8021.14 rows=4 width=23) -> Seq Scan on part (cost=0.00..8018.00 rows=1 width=4) Filter: (p_name ~~ '%aquamarine%'::text) -> Index Scan using i_ps_partkey on partsupp (cost=0.00..3.07 rows=5 width=19) Index Cond: ("outer".p_partkey = partsupp.ps_partkey) -> Index Scan using i_l_suppkey on lineitem (cost=0.00..2542.69 rows=634 width=45) Index Cond: ("outer".ps_suppkey = lineitem.l_suppkey) -> Index Scan using pk_supplier on supplier (cost=0.00..3.01 rows=1 width=8) Index Cond: ("outer".ps_suppkey = supplier.s_suppkey) -> Index Scan using pk_orders on orders (cost=0.00..3.01 rows=1 width=12) Index Cond: (orders.o_orderkey = "outer".l_orderkey) (27 rows)
---------------------------(end of broadcast)--------------------------- TIP 3: if posting/reading through Usenet, please send an appropriate subscribe-nomail command to [EMAIL PROTECTED] so that your message can get through to the mailing list cleanly