從 TPCH 測試學習性能優化技巧之 Q6

一、 查詢要求

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是並行數。

腳本執行時間,單位:秒

從 TPCH 測試學習性能優化技巧之 Q6

三、 SPL優化

這是一個常規的過濾後聚合查詢,結果集只有一條記錄,沒有特殊的優化技術,跟Q1一樣使用多路遊標充分利用並行即可。

SPL腳本如下:

從 TPCH 測試學習性能優化技巧之 Q6

這裡也使用了創建遊標時即進行數據過濾以減少讀取量的技巧(這個技巧在SPL中很常用,後面的例子中都有用到,後文中不再贅述)。

腳本執行時間,單位:秒

從 TPCH 測試學習性能優化技巧之 Q6

因為數據量比較大,組表的列存優勢比較明顯。


分享到:


相關文章: