從 TPCH 測試學習效能優化技巧之 Q19

2021-09-29 19:01:25 字數 3095 閱讀 7530

q19語句查詢得到對一些空運或人工運輸零件三個不同種類的所有訂單的總折扣收入。零件的選擇考慮特定品牌、包裝和尺寸範圍。

q19語句的特點是:帶有聚集、in子查詢操作並存的三表連線操作。

oracle編寫的查詢sql語句如下:

select  /*+ parallel(n) */

sum(l_extendedprice * (1 - l_discount)) as revenue

from

lineitem,part

where

p_partkey = l_partkey

and p_brand = 'brand#32'

and p_container in ('sm case', 'sm box', 'sm pack', 'sm pkg')

and l_quantity >= 7 and l_quantity <= 7 + 10

and p_size between 1 and 5

and l_shipmode in ('air', 'air reg')

and l_shipinstruct = 'deliver in person'

orp_partkey = l_partkey

and p_brand = 'brand#23'

and p_container in ('med bag', 'med box', 'med pkg', 'med pack')

and l_quantity >= 18 and l_quantity <= 18 + 10

and p_size between 1 and 10

and l_shipmode in ('air', 'air reg')

and l_shipinstruct = 'deliver in person'

orp_partkey = l_partkey

and p_brand = 'brand#45'

and p_container in ('lg case', 'lg box', 'lg pack', 'lg pkg')

and l_quantity >= 22 and l_quantity <= 22 + 10

and p_size between 1 and 15

and l_shipmode in ('air', 'air reg')

and l_shipinstruct = 'deliver in person'

其中/*+ parallel(n) */ 是oracle的並行查詢語法,n是並行數。

指令碼執行時間,單位:秒

並行數124

812oracle

395277

204176

154

本查詢是個兩表連線的過濾查詢,結構上比較簡單,但是過濾條件比較複雜。我們注意到,條件表示式中有不少項只與較小的表part相關,而且這些項的計算複雜度還較高(有in運算),如果先針對part表把這些項計算出來,則計算量將比針對兩表連線結果集再計算要少得多,因為連續結果集是和lineitem表規模相同,要大得多。

spl指令碼如下:a1

=bx2

=now()

3>brand1="brand#32"

4>brand2="brand#23"

5>brand3="brand#45"

6>quantity1=7

7>quantity2=18

8>quantity3=22

9=["sm   case", "sm box", "sm pack", "sm pkg"]

10=["med   bag", "med box", "med pkg", "med pack"]

11=["lg   case", "lg box", "lg pack", "lg pkg"]

12=file(path+"part.ctx").create().cursor@m(p_partkey,p_brand,p_size,p_container;p_size>=1;a1)

13=a12.derive(if(p_brand==brand1   && a9.contain(p_container) && p_size<=5:1,   p_brand==brand2 &&   a10.contain(p_container) && p_size<=10:2,    p_brand==brand3 && a11.contain(p_container)   &&   p_size<=15:3;0):flag).select(flag>0).fetch().derive@o().keys@i(p_partkey)  

14=file(path+"lineitem.ctx").create().cursor@m(l_partkey,l_quantity,l_extendedprice,l_discount;   (l_shipmode=="air" || l_shipmode=="air reg") &&   l_shipinstruct=="deliver in person" && l_quantity >=   quantity1 && l_quantity <= quantity3+10,l_partkey:a13;a1)

15=a14.select(case(l_partkey.flag,1:l_quantity<=quantity1+10,2:l_quantity>=quantity2   && l_quantity<=quantity2+10;l_quantity>=quantity3))

16=a15.total(sum(l_extendedprice*   (1 - l_discount)))

17=now()

18=interval@s(a2,a17)

a13在part表中新產生乙個flag欄位,用於將part相關的複雜條件項先計算出來。當記錄滿足sql中的or條件1、2、3時分別賦值為1、2、3,都不滿足則賦值0,然後用flag值是否大於0來過濾。在a15中再根據flag的值來選擇用哪個quantity值對l_quantity進行過濾。flag相關的複雜計算式只需要計算part表的行數次。

指令碼執行時間,單位:秒

並行數124

812oracle

395277

204176

154spl組表

15880

4021

15

從 TPCH 測試學習效能優化技巧之 Q16

q16語句查詢獲得能夠以指定的貢獻條件 零件的供貨商數量。可用於決定在訂單量大,任務緊急時,是否有充足的供貨商。q16語句的特點是 帶有分組 排序 聚集 去重 not in子查詢操作並存的兩表連線操作。oracle編寫的查詢sql語句如下 select parallel n p brand,p ty...

從 TPCH 測試學習效能優化技巧之 Q2

q2語句查詢獲得最小代價的供貨商。得到給定的區域內,對於指定的零件 某一型別和大小的零件 哪個 商能以最低的 它,就可以選擇哪個 商來訂貨。q2語句的特點是 帶有排序 聚集操作 子查詢並存的多表查詢操作。查詢語句沒有從語法上限制返回多少條元組,tpc h標準規定,查詢結果只返回前100行即可 通常依...

1 學習效能優化的要點

效能分析本質是找出應用或者系統的瓶頸並設法避免或者緩解它們,從而更高效的利用系統資源處理更多的請求。1 從應用負載的角度來說,直接影響產品終端的效能。隨著應用負載的增加,系統的資源公升高甚至到達極限。2 從系統資源視角出發,比如資源的使用率和飽和度等 1.選擇指標評估應用程式和系統的效能。比如cpu...