一、 查詢要求
Q6語句查詢得到某一年中通過變換折扣帶來的增量收入。這是典型的"what-if"判斷,用來尋找增加收入的途徑。預測收入變化查詢考慮了指定的一年中折扣在"DISCOUNT-0.01"和"DISCOUNT+0.01 "之間的已運送的所有訂單,求解把l_quantity小於quantity的訂單的折扣消除之後總收入增加的數量。
Q6語句的特點是:帶有聚集操作的單表查詢操作。查詢語句使用了BETWEEN-AND操作符,有的數據庫可以對BETWEEN-AND進行優化。
二、 Oracle執行
Oracle編寫的查詢SQL語句如下:
select /*+ parallel(n) */
sum(l_extendedprice * l_discount) as revenue
from
lineitem
where
l_shipdate >= date '1995-01-01'
and l_shipdate < date '1995-01-01' + interval '1' year
and l_discount between 0.05 - 0.01 and 0.05 + 0.01
and l_quantity < 24;
其中/*+ parallel(n) */ 是Oracle的並行查詢語法,n是並行數。
腳本執行時間,單位:秒
三、 SPL優化
這是一個常規的過濾後聚合查詢,結果集只有一條記錄,沒有特殊的優化技術,跟Q1一樣使用多路遊標充分利用並行即可。
SPL腳本如下:
這裡也使用了創建遊標時即進行數據過濾以減少讀取量的技巧(這個技巧在SPL中很常用,後面的例子中都有用到,後文中不再贅述)。
腳本執行時間,單位:秒
因為數據量比較大,組表的列存優勢比較明顯。
閱讀更多 raqsoft 的文章