ORACLE基于SQL查詢優(yōu)化培訓(xùn)文檔.ppt

ORACLE基于SQL查詢優(yōu)化培訓(xùn)文檔.ppt

ID:48039869

大?。?81.00 KB

頁數(shù):19頁

時間:2020-01-14

ORACLE基于SQL查詢優(yōu)化培訓(xùn)文檔.ppt_第1頁
ORACLE基于SQL查詢優(yōu)化培訓(xùn)文檔.ppt_第2頁
ORACLE基于SQL查詢優(yōu)化培訓(xùn)文檔.ppt_第3頁
ORACLE基于SQL查詢優(yōu)化培訓(xùn)文檔.ppt_第4頁
ORACLE基于SQL查詢優(yōu)化培訓(xùn)文檔.ppt_第5頁
資源描述:

《ORACLE基于SQL查詢優(yōu)化培訓(xùn)文檔.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、ORACLE基于SQL查詢優(yōu)化培訓(xùn)文檔2013年11月查詢優(yōu)化基本準則詳解2ORACLE的解析器按照從右到左的順序處理FROM子句中的表名,因此FROM子句中寫在最后的表(基礎(chǔ)表drivingtable)將被最先處理。在FROM子句中包含多個表的情況下,你必須選擇記錄條數(shù)最少的表作為基礎(chǔ)表。例如:表TAB116384條記錄表TAB21條記錄選擇TAB2作為基礎(chǔ)表(最好的方法)selectcount(*)fromtab1,tab2執(zhí)行時間0.96秒選擇TAB2作為基礎(chǔ)表(不佳的方法)selectcount(*)fromtab2,tab1執(zhí)行時間26.09秒查詢優(yōu)

2、化基本準則詳解3ORACLE采用自下而上的順序解析WHERE子句,根據(jù)這個原理,表之間的連接必須寫在其他WHERE條件之前,那些可以過濾掉最大數(shù)量記錄的條件必須寫在WHERE子句的末尾。例如:(低效,執(zhí)行時間156.3秒)SELECT…FROMEMPEWHERESAL>50000ANDJOB=‘MANAGER'AND25<(SELECTCOUNT(*)FROMEMPWHEREMGR=E.EMPNO);(高效,執(zhí)行時間10.6秒)SELECT…FROMEMPEWHERE25<(SELECTCOUNT(*)FROMEMPWHEREMGR=E.EMPNO)ANDSA

3、L>50000ANDJOB=‘MANAGER';在進行多表關(guān)聯(lián)時,多用Where語句把單個表的結(jié)果集最小化,多用聚合函數(shù)匯總結(jié)果集后再與其它表做關(guān)聯(lián),以使結(jié)果集數(shù)據(jù)量最小化查詢優(yōu)化基本準則詳解4減少對表的查詢在含有子查詢的SQL語句中,要特別注意減少對表的查詢例如:低效SELECTTAB_NAMEFROMTABLESWHERETAB_NAME=(SELECTTAB_NAMEFROMTAB_COLUMNSWHEREVERSION=604)ANDDB_VER=(SELECTDB_VERFROMTAB_COLUMNSWHEREVERSION=604)高效SELECT

4、TAB_NAMEFROMTABLESWHERE(TAB_NAME,DB_VER)=(SELECTTAB_NAME,DB_VER)FROMTAB_COLUMNSWHEREVERSION=604)查詢優(yōu)化基本準則詳解5用EXISTS替代IN在許多基于基礎(chǔ)表的查詢中,為了滿足一個條件,往往需要對另一個表進行聯(lián)接。在這種情況下,使用EXISTS(或NOTEXISTS)通常將提高查詢的效率。使用exists而不用IN因為Exists只檢查行的存在,而in檢查實際值例如:低效SELECT*FROMEMP(基礎(chǔ)表)WHEREEMPNO>0ANDDEPTNOIN(SELECT

5、DEPTNOFROMDEPTWHERELOC=‘MELB')高效SELECT*FROMEMP(基礎(chǔ)表)WHEREEMPNO>0ANDEXISTS(SELECT‘X'FROMDEPTWHEREDEPT.DEPTNO=EMP.DEPTNOANDLOC=‘MELB')用IN的SQL性能總是比較低,原因是:對于用IN的SQL語句ORACLE總是試圖將其轉(zhuǎn)換成多個表的連接,如果轉(zhuǎn)換不成功則先執(zhí)行IN里面的子查詢,再查詢外層的表記錄如果轉(zhuǎn)換成功就轉(zhuǎn)換成多個表的連接。因此不管理怎么,用IN的SQL語句總是多了一個轉(zhuǎn)換的過程。因此在業(yè)務(wù)密集的SQL當(dāng)中盡量不采用IN操作符。查

6、詢優(yōu)化基本準則詳解6用NOTEXISTS替代NOTIN在子查詢中,NOTIN子句將執(zhí)行一個內(nèi)部的排序和合并。無論在哪種情況下,NOTIN都是最低效的(因為它對子查詢中的表執(zhí)行了一個全表遍歷)。為了避免使用NOTIN,我們可以把它改寫成外連接(OuterJoins)或NOTEXISTS.例如:SELECT…FROMEMPWHEREDEPT_NONOTIN(SELECTDEPT_NOFROMDEPTWHEREDEPT_CAT='A');為了提高效率。改寫為:SELECT….FROMEMPEWHERENOTEXISTS(SELECT‘X'FROMDEPTDWHERE

7、D.DEPT_NO=E.DEPT_NOANDDEPT_CAT=‘A');NOTIN操作符此操作強烈推薦不使用,因為其不能應(yīng)用表的索引。如遇這種情況,應(yīng)該用EXISTS,NOTEXISTS方案代替。查詢優(yōu)化基本準則詳解7用EXISTS替換DISTINCT當(dāng)提交一個包含一對多表信息(比如部門表和雇員表)的查詢時,避免在SELECT子句中使用DISTINCT.一般可以考慮用EXIST替換例如:低效:SELECTDISTINCTDEPT_NO,DEPT_NFROMDEPTD,EMPEWHERED.DEPT_NO=E.DEPT_NO高效:SELECTDEPT_NO,DE

8、PT_NAMEFROMDEPTDWHE

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

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

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