資源描述:
《oracle中的增強(qiáng)子查詢優(yōu)化》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、Oracle中的增強(qiáng)子查詢優(yōu)化這篇文章是我偶然在asktom上看到的,當(dāng)時(shí)有人問子查詢合并(subquerycoalescing),TOM給出了這篇文章的鏈接:http://www.vldb.org/pvldb/2/vldb09-423.pdf我花了大約一周時(shí)間翻譯,有很多術(shù)語找不到相關(guān)翻譯就只好自己杜撰一個(gè),根據(jù)自己的理解對(duì)一些難懂的地方做了注釋。如果你發(fā)現(xiàn)了錯(cuò)誤請(qǐng)不吝指正。文中的例子非常值得一讀,目前我沒有時(shí)間去一一驗(yàn)證哪些已由CBO實(shí)現(xiàn),如果你都看懂了對(duì)提高自己的SQL技巧是非常有幫助的。插圖只上傳了前四個(gè),后面的都是一些關(guān)于性
2、能的圖表,自己看原文即可。Oracle中的增強(qiáng)型子查詢優(yōu)化作者:SrikanthBellamkonda(Srikanth.Bellamkonda@oracle.com)????AngelaAmor(Angela.Amor@oracle.com)????RafiAhmed(Rafi.Ahmed@oracle.com)????MohamedZait(Mohamed.Zait@oracle.com)????AndrewWitkowski(Andrew.Witkowski@oracle.com)????Chun-ChiehLin(Chun-C
3、hieh.Lin@oracle.com)????????OracleUSA????500OracleParkway????RedwoodShores,CA,USA(版權(quán)歸原作者所有,未經(jīng)許可不得轉(zhuǎn)載)摘要本文描述了ORACLE關(guān)系數(shù)據(jù)庫系統(tǒng)中的增強(qiáng)型子查詢優(yōu)化。它討論了幾種技術(shù)——子查詢合并,利用窗口函數(shù)(譯者注:即分析函數(shù))的子查詢消除,對(duì)分組查詢的視圖消除(viewelimination)。這些技術(shù)辨認(rèn)出查詢結(jié)構(gòu)中的冗余成分,并把它們?nèi)コ?,將查詢轉(zhuǎn)換為可能更加優(yōu)化的形式。本文也討論了新型的并行執(zhí)行技術(shù),該技術(shù)應(yīng)用廣泛,并可用來改善
4、這些經(jīng)過變換的查詢的可擴(kuò)展性。它還描述了一種反連接(antijoin)的變種,用來優(yōu)化在有空值的列上帶全稱量詞(譯者注:在SQL中指ALL這類量詞)的查詢。它隨后演示了這些優(yōu)化的結(jié)果,表明在執(zhí)行速度上有著顯著的改善。1.介紹當(dāng)今的關(guān)系數(shù)據(jù)庫系統(tǒng)處理各種復(fù)雜的SQL查詢,包括帶有聚合函數(shù),UNION/UNIONALL,DISTINCT,分組(GROUPBY)視圖等等的嵌套子查詢。這類查詢?cè)跊Q策支持系統(tǒng)(DSS)和在線分析處理系統(tǒng)(OLAP)中越來越重要。查詢變換是通常推薦的用于優(yōu)化此類子查詢的技術(shù)。子查詢是SQL的一種強(qiáng)大的組件,大大擴(kuò)
5、展了它的聲明性和表達(dá)能力。SQL標(biāo)準(zhǔn)允許子查詢被使用在SELECT,FROM,WHERE和HAVING子句中。決策支持系統(tǒng)的基準(zhǔn)測試TPC-H[文獻(xiàn)14]和TPC-DS[文獻(xiàn)15]大量使用了子查詢。TPC-H基準(zhǔn)測試的22個(gè)查詢中,差不多有一半用了子查詢。大部分是相關(guān)子查詢,很多都含有聚合函數(shù)。所以,高效地執(zhí)行復(fù)雜子查詢對(duì)數(shù)據(jù)庫至關(guān)重要。1.1ORACLE中的查詢變換Oracle執(zhí)行很多種的查詢變換——子查詢展開(譯者注:SubqueryUnnesting,指的是把ANY和EXISTS這類子查詢變成連接),分組和DISTINCT視圖的
6、合并(譯者注:group-byanddistinctviewmerging,指的是在帶有GROUPBY/DISTICNT的視圖/內(nèi)聯(lián)視圖中,先和外層的表進(jìn)行連接,過濾掉一些數(shù)據(jù)然后再做聚合操作),相同子表達(dá)式的消除(譯者注:common??sub-expressionelimination,指的是同樣的一個(gè)表達(dá)式出現(xiàn)多次,只需計(jì)算一次并多次引用計(jì)算結(jié)果),連接謂詞下推(譯者注:joinpredicatepushdown,指的是把外層的連接條件推入里層從而達(dá)到預(yù)先過濾的目的),連接因式分解(譯者注:joinfactorization,指
7、的是把UNION的兩個(gè)子查詢中的公共部分提取出來放到UNION之后做,類似提取公因式),集合操作INTERSECT和MINUS到連接/反連接的轉(zhuǎn)換,OR謂詞的擴(kuò)展(譯者注:ORexpansion,指的是把OR或者IN變成一系列UNIONALL),星型轉(zhuǎn)換(譯者注:startransformation,用于數(shù)據(jù)倉庫的事實(shí)表和維表連接,轉(zhuǎn)換為事實(shí)表的位圖索引的一系列BITAND運(yùn)算),分組和DISTINCT的置換(譯者注:group-byanddistinct??placement,指的是在有GROUPBY或DISTINCT,同時(shí)有WHE
8、RE連接條件,CBO先做分組聚合減少行數(shù)再做連接操作,和先前的group-byanddistinctviewmerging恰好相反)。Oracle中的查詢變換可能是試探式的或基于成本的。在基于成本的變換中,邏輯變換和物理