日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

pu代表什么意思 pua代表什么意思( 四 )


select c_nationkey, sum(l_quantity*l_extendedprice)from lineitem, orders, customerwhere l_orderkey = o_orderkeyand o_custkey = c_custkeygroup by c_nationkey物化視圖
create materialized view mview3enable Query rewrite asselect o_custkey, count_big(*) as cnt, sum(l_quantity*l_extendedprice) as revenuefrom lineitem, orderswhere l_orderkey = o_orderkeygroup by o_custkey查詢可以被改寫為
select c_nationkey, sum(revenue)from customer join mview3 on c_custkey = o_custkeygroup by c_nationkey如果分組列表不同,只能改寫 Group By 在查詢最外部的情況 , 否則無法進行進一步聚合,無法滿足第二個改寫要求 。只有特定的聚合函數(shù)支持進一步聚合 , 常見的聚合函數(shù)有 MIN,MAX , SUM,COUNT 。
例如如下查詢
select o_custkey, count(*) as cnt, sum(l_quantity*l_extendedprice) as revenuefrom lineitem, orderswhere l_orderkey = o_orderkeygroup by o_custkey物化視圖
create materialized view mview4 enable Query rewrite asselect o_custkey, l_partkey, count(*) as cnt, sum(l_quantity*l_extendedprice) as revenuefrom lineitem, orderswhere l_orderkey = o_orderkeygroup by o_custkey, l_partkey可以被改寫為
select c_nationkey, sum(cnt) as cnt, sum(revenue) as revenuefrom mview4where c_custkey = o_custkeygroup by o_custkey如果聚合函數(shù)在視圖中不存在,可以通過一些規(guī)則進行計算 , 例如從 SUM(x) 和 COUNT(x) 計算出 AVG(x) , 從 SUM(x) + SUM(y) 中計算出 SUM(x + y),這些依賴表達式改寫檢查中啟發(fā)式的規(guī)則 。
高級改寫規(guī)則如果物化視圖和查詢不滿足上一節(jié)的改寫規(guī)則,還可以通過其他規(guī)則進行轉(zhuǎn)換 。
Join 補償
如果只考慮 Inner Join , 視圖和查詢的 Join 關(guān)系 不一致有兩種情況:查詢比視圖包含更多的聯(lián)接 , 或者視圖包含更多的聯(lián)接 。

如果查詢比視圖包含更多的表 , 我們可以簡單把缺少的 Join 添加在視圖之上,使其滿足改寫要求 。Join 條件會通過謂詞改寫正確的添加進來,優(yōu)化器也可以通過后續(xù)規(guī)則調(diào)整計劃 。
Join 補償使優(yōu)化器可以更早的進行匹配改寫 , 減少改寫的嘗試次數(shù) 。
例如如下查詢
select c_custkey, c_name, l_orderkey,l_partkey, l_quantityFrom lineitem, customer, ordersWhere l_orderkey = o_orderkeyAnd o_custkey = c_custkeyWhere l_orderkey between 1000 and 1500And l_shipdate = l_commitdate物化視圖
Create materialized view mview5Enable query rewrite asSelect l_orderkey,l_partkey, l_quantityFrom lineitem, ordersWhere l_orderkey = o_orderkeyAnd o_orderkey >= 500可以被改寫為
Select l_orderkey, l_partkey, l_quantityFrom mview5 join customer on o_custkey = c_custkeyWhere l_orderkey between 1000 and 1500And l_shipdate = l_commitdateJoin 消除
如果一個 Join 出現(xiàn)在視圖中但是沒有出現(xiàn)在查詢中,可以嘗試使用 Join 消除規(guī)則 。Join 消除是優(yōu)化器優(yōu)化中的一項常見方法,如果 Join 滿足以下5個條件,則表 T1 在與表 T2 的聯(lián)接中時不變的:
聯(lián)接條件是一個簡單的等值條件T1.fk 是 T2.pk 的外鍵T1.fk 滿足非 null 約束T2 沒有任何的謂詞T2 在與 T1 以外的表的聯(lián)接是不變的這意味著表 T1 在與 T2 的 Join 關(guān)系不會影響 T1 的結(jié)果,視圖中的 T2 可以在 Join Graph 中忽略 。不變聯(lián)接的存在允許在基礎(chǔ)物化視圖上創(chuàng)建更大的并集或超集,從而允許物化視圖包含更大的預(yù)計算,也可以改寫更多的查詢 。
例如查詢
Select l_orderkey, l_partkey, l_quantityFrom lineitemWhere l_orderkey between 1000 and 1500And l_shipdate = l_commitdate物化視圖
Create materialized view mview6Enable query rewrite asSelect c_custkey, c_name, l_orderkey,l_partkey, l_quantityFrom lineitem, orders, customerWhere l_orderkey = o_orderkeyAnd o_custkey = c_custkeyAnd o_orderkey >= 500可以被改寫成

推薦閱讀