oracle常用sql技巧收藏

oracle常用sql技巧收藏

ID:8972813

大?。?8.00 KB

頁數(shù):5頁

時(shí)間:2018-04-13

oracle常用sql技巧收藏_第1頁
oracle常用sql技巧收藏_第2頁
oracle常用sql技巧收藏_第3頁
oracle常用sql技巧收藏_第4頁
oracle常用sql技巧收藏_第5頁
資源描述:

《oracle常用sql技巧收藏》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫

1、Gotostartofmetadata1.?SELECT子句中避免使用?“*”?????當(dāng)你想在SELECT子句中列出所有的COLUMN時(shí),使用動(dòng)態(tài)SQL列引用?‘’?是一個(gè)方便的方法.不幸的是,這是一個(gè)非常低效的方法.?實(shí)際上,ORACLE在解析的過程中,?會(huì)將“”?依次轉(zhuǎn)換成所有的列名,?這個(gè)工作是通過查詢數(shù)據(jù)字典完成的,?這意味著將耗費(fèi)更多的時(shí)間.?2.使用DECODE函數(shù)來減少處理時(shí)間?????使用DECODE函數(shù)可以避免重復(fù)掃描相同記錄或重復(fù)連接相同的表.?例如:?Sql代碼??SELECTC

2、OUNT(*),SUM(SAL)FROMEMPWHEREDEPT_NO=0020ANDENAMELIKE‘SMITH%’;SELECTCOUNT(*),SUM(SAL)FROMEMPWHEREDEPT_NO=0030ANDENAMELIKE‘SMITH%’;????你可以用DECODE函數(shù)高效地得到相同結(jié)果:?Sql代碼?SELECTCOUNT(decode(dept_no,0020,’x’,NULL))d0020_count,COUNT(decode(dept_no,0030,’x’,NULL))d0

3、030_count,SUM(decode(dept_no,0020,sal,NULL))d0020_sal,SUM(decode(dept_no,0030,sal,NULL))d0030_salFROMempWHEREenameLIKE‘smith%’;????類似的,DECODE函數(shù)也可以運(yùn)用于GROUP?BY?和ORDER?BY子句中.?3.刪除重復(fù)記錄????最高效的刪除重復(fù)記錄方法?(?因?yàn)槭褂昧薘OWID)?DELETEFROMempeWHEREe.rowid>(SELECTMIN(x.row

4、id)FROMempxWHEREx.emp_no=e.emp_no);4.?用TRUNCATE替代DELETE?????當(dāng)刪除表中的記錄時(shí),在通常情況下,回滾段(rollback?segments?)?用來存放可以被恢復(fù)的信息,如果你沒有COMMIT事務(wù),ORACLE會(huì)將數(shù)據(jù)恢復(fù)到刪除之前的狀態(tài)(準(zhǔn)確地說是恢復(fù)到執(zhí)行刪除命令之前的狀況),而當(dāng)運(yùn)用TRUNCATE時(shí),?回滾段不再存放任何可被恢復(fù)的信息.當(dāng)命令運(yùn)行后,數(shù)據(jù)不能被恢復(fù).因此很少的資源被調(diào)用,執(zhí)行時(shí)間也會(huì)很短.?5.計(jì)算記錄條數(shù)?????和一般

5、的觀點(diǎn)相反,?count(*)?比count(1)稍快?,當(dāng)然如果可以通過索引檢索,對(duì)索引列的計(jì)數(shù)仍舊是最快的.?例如?COUNT(EMPNO)?6.用Where子句替換HAVING子句?????避免使用HAVING子句,HAVING?只會(huì)在檢索出所有記錄之后才對(duì)結(jié)果集進(jìn)行過濾,這個(gè)處理需要排序、總計(jì)等操作,如果能通過WHERE子句限制記錄的數(shù)目,那就能減少這方面的開銷,?例如:?Sql代碼??--低效SELECTregion,avg(log_size)FROMlocationGROUPBYregion

6、HAVINGregion<>'sydney'ANDregion<>'perth'--高效SELECTregion,avg(log_size)FROMlocationWHEREregion<>'sydney'ANDregion<>'perth'GROUPBYregion7.?用EXISTS替代IN????在許多基于基礎(chǔ)表的查詢中,為了滿足一個(gè)條件,往往需要對(duì)另一個(gè)表進(jìn)行聯(lián)接.在這種情況下,?使用EXISTS(或NOT?EXISTS)通常將提高查詢的效率.?--低效SELECT*FROMempWHEREem

7、pno>0ANDdeptnoIN(SELECTdeptnoFROMdeptWHEREloc=‘melb’);--高效:SELECT*FROMempWHEREempno>0ANDEXISTS(SELECT‘x’FROMdeptWHEREdept.deptno=emp.deptnoANDloc=‘melb’);8.用NOT?EXISTS替代NOT?IN????在子查詢中,NOT?IN子句將執(zhí)行一個(gè)內(nèi)部的排序和合并.?無論在哪種情況下,NOT?IN都是最低效的?(因?yàn)樗鼘?duì)子查詢中的表執(zhí)行了一個(gè)全表遍歷).??

8、為了避免使用NOT?IN,我們可以把它改寫成外連接(Outer?Joins)或NOT?EXISTS.?例如:?SELECT?…FROM?EMP??WHERE?DEPT_NO?NOT?IN?(SELECT?DEPT_NO?FROM?DEPT?WHERE?DEPT_CAT=’A’);?Sql代碼??--為了提高效率改寫為:(方法一:高效)SELECTFROMempa,deptbWHEREa.dept_no=b.deptANDb.dept_noI

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

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

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