一、 查詢要求
Q7語句是查詢從供貨商國家與銷售商品的國家之間通過銷售獲利情況的查詢。此查詢確定在兩國之間貨運商品的量用以幫助重新談判貨運合同。
Q7語句的特點是:帶有分組、排序、聚集、子查詢操作並存的多表查詢操作。子查詢的父層查詢不存在其他查詢對象,是格式相對簡單的子查詢。
二、 Oracle執行
Oracle編寫的查詢SQL語句如下:
select /*+ parallel(n) */
supp_nation,
cust_nation,
l_year,
sum(volume) as revenue
from
(
select
n1.n_name as supp_nation,
n2.n_name as cust_nation,
extract(year from l_shipdate) as l_year,
l_extendedprice * (1 - l_discount) as volume
from
supplier,
lineitem,
orders,
customer,
nation n1,
nation n2
where
s_suppkey = l_suppkey
and o_orderkey = l_orderkey
and c_custkey = o_custkey
and s_nationkey = n1.n_nationkey
and c_nationkey = n2.n_nationkey
and (
(n1.n_name = 'CHINA' and n2.n_name = 'RUSSIA')
or (n1.n_name = 'RUSSIA' and n2.n_name = 'CHINA')
)
and l_shipdate between date '1995-01-01' and date '1996-12-31'
) shipping
group by
supp_nation,
cust_nation,
l_year
order by
supp_nation,
cust_nation,
l_year;
其中/*+ parallel(n) */ 是Oracle的並行查詢語法,n是並行數。
腳本執行時間,單位:秒
三、 SPL優化
中間子查詢的運算和Q3類似,優化原理也類似,這裡就不再贅述。
SPL腳本如下:
注意nation表數據A5在A6和A7分別使用了一次,用於外鍵匹配過濾,這和SQL的別名寫法不同。
腳本執行時間,單位:秒
閱讀更多 raqsoft 的文章