oracle多表查詢優(yōu)化

oracle多表查詢優(yōu)化

ID:16096362

大?。?0.00 KB

頁數(shù):11頁

時間:2018-08-07

oracle多表查詢優(yōu)化_第1頁
oracle多表查詢優(yōu)化_第2頁
oracle多表查詢優(yōu)化_第3頁
oracle多表查詢優(yōu)化_第4頁
oracle多表查詢優(yōu)化_第5頁
資源描述:

《oracle多表查詢優(yōu)化》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、ORACLE多表查詢優(yōu)化ORACLE多表查詢優(yōu)化時間:2009-10-2913:34:35來源:網(wǎng)絡作者:未知點擊:124次ORACLE多表查詢優(yōu)化這里提供的是執(zhí)行性能的優(yōu)化,而不是后臺數(shù)據(jù)庫優(yōu)化器資料:參考數(shù)據(jù)庫開發(fā)性能方面的各種問題,收集了一些優(yōu)化方案統(tǒng)計如下(當然,象索引等優(yōu)化方案太過簡單就不列入了,嘿嘿):ORACLE多表查詢優(yōu)化這里提供的是執(zhí)行性能的優(yōu)化,而不是后臺數(shù)據(jù)庫優(yōu)化器資料:參考數(shù)據(jù)庫開發(fā)性能方面的各種問題,收集了一些優(yōu)化方案統(tǒng)計如下(當然,象索引等優(yōu)化方案太過簡單就不列入了,嘿嘿):執(zhí)行路徑:ORACLE的這個功

2、能大大地提高了SQL的執(zhí)行性能并節(jié)省了內(nèi)存的使用:我們發(fā)現(xiàn),單表數(shù)據(jù)的統(tǒng)計比多表統(tǒng)計的速度完全是兩個概念.單表統(tǒng)計可能只要0.02秒,但是2張表聯(lián)合統(tǒng)計就可能要幾十表了.這是因為ORACLE只對簡單的表提供高速緩沖(cachebuffering),這個功能并不適用于多表連接查詢..數(shù)據(jù)庫管理員必須在init.ora中為這個區(qū)域設置合適的參數(shù),當這個內(nèi)存區(qū)域越大,就可以保留更多的語句,當然被共享的可能性也就越大了.當你向ORACLE提交一個SQL語句,ORACLE會首先在這塊內(nèi)存中查找相同的語句.這里需要注明的是,ORACLE對兩者采

3、取的是一種嚴格匹配,要達成共享,SQL語句必須完全相同(包括空格,換行等).共享的語句必須滿足三個條件:A.字符級的比較:當前被執(zhí)行的語句和共享池中的語句必須完全相同.例如:SELECT*FROMEMP;和下列每一個都不同SELECT*fromEMP;Select*FromEmp;SELECT*FROMEMP;B.兩個語句所指的對象必須完全相同:用戶對象名如何訪問Jacksal_limitprivatesynonymWork_citypublicsynonymPlant_detailpublicsynonymJillsal_limi

4、tprivatesynonymWork_citypublicsynonymPlant_detailtableowner考慮一下下列SQL語句能否在這兩個用戶之間共享.SQL能否共享原因selectmax(sal_cap)fromsal_limit;不能每個用戶都有一個privatesynonym-sal_limit,它們是不同的對象selectcount(*)fromwork_citywheresdesclike'NEW%';能兩個用戶訪問相同的對象publicsynonym-work_cityselecta.sdesc,b.loc

5、ationfromwork_citya,plant_detailbwherea.city_id=b.city_id不能用戶jack通過privatesynonym訪問plant_detail而jill是表的所有者,對象不同.C.兩個SQL語句中必須使用相同的名字的綁定變量(bindvariables)例如:第一組的兩個SQL語句是相同的(可以共享),而第二組中的兩個語句是不同的(即使在運行時,賦于不同的綁定變量相同的值)a.selectpin,namefrompeoplewherepin=:blk1.pin;selectpin,na

6、mefrompeoplewherepin=:blk1.pin;b.selectpin,namefrompeoplewherepin=:blk1.ot_ind;selectpin,namefrompeoplewherepin=:blk1.ov_ind;重點關(guān)注1:選擇最有效率的表名順序(只在基于規(guī)則的優(yōu)化器中有效)重點關(guān)注ORACLE的解析器按照從右到左的順序處理FROM子句中的表名,因此FROM子句中寫在最后的表(基礎表drivingtable)將被最先處理.在FROM子句中包含多個表的情況下,你必須選擇記錄條數(shù)最少的表作為基礎表.

7、當ORACLE處理多個表時,會運用排序及合并的方式連接它們.首先,掃描第一個表(FROM子句中最后的那個表)并對記錄進行派序,然后掃描第二個表(FROM子句中最后第二個表),最后將所有從第二個表中檢索出的記錄與第一個表中合適記錄進行合并.例如:表TAB116,384條記錄表TAB21條記錄選擇TAB2作為基礎表(最好的方法)selectcount(*)fromtab1,tab2執(zhí)行時間0.96秒選擇TAB2作為基礎表(不佳的方法)selectcount(*)fromtab2,tab1執(zhí)行時間26.09秒如果有3個以上的表連接查詢,那

8、就需要選擇交叉表(intersectiontable)作為基礎表,交叉表是指那個被其他表所引用的表.例如:EMP表描述了LOCATION表和CATEGORY表的交集.SELECT*FROMLOCATIONL,CATEGORYC,EMP

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。