全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Go to start of metadata 1.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代碼SELECT COUNT(*),SUM(SAL) FROM EMP WHERE DEPT_NO = 0020 AND ENAME LIKE SMITH%; SELECT COUNT(*),SUM(SAL) FROM EMP WHERE DEPT_NO = 0030 AND ENAME LIKE SMITH%; 你可以用DECODE函數(shù)高效地得到相同結(jié)果:Sql代碼 SELECT COUNT(decode(dept_no, 0020, x, NULL) d0020_count, COUNT(decode(dept_no, 0030, x, NULL) d0030_count, SUM(decode(dept_no, 0020, sal, NULL) d0020_sal, SUM(decode(dept_no, 0030, sal, NULL) d0030_sal FROM emp WHERE ename LIKE smith%;類似的,DECODE函數(shù)也可以運(yùn)用于GROUPBY和ORDERBY子句中.3.刪除重復(fù)記錄最高效的刪除重復(fù)記錄方法(因?yàn)槭褂昧薘OWID)DELETE FROM emp e WHERE e.rowid (SELECT MIN(x.rowid)FROM emp x WHERE x.emp_no = e.emp_no);4.用TRUNCATE替代DELETE當(dāng)刪除表中的記錄時(shí),在通常情況下,回滾段(rollbacksegments)用來存放可以被恢復(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ù)和一般的觀點(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代碼-低效SELECT region,avg(log_size) FROM location GROUP BY regionHAVING region sydney AND region perth-高效SELECT region,avg(log_size) FROM location WHERE region sydney AND region perth GROUP BY region7.用EXISTS替代IN在許多基于基礎(chǔ)表的查詢中,為了滿足一個(gè)條件,往往需要對(duì)另一個(gè)表進(jìn)行聯(lián)接.在這種情況下,使用EXISTS(或NOTEXISTS)通常將提高查詢的效率.-低效SELECT * FROM emp WHERE empno 0 AND deptno IN (SELECT deptno FROM dept WHERE loc = melb);-高效:SELECT * FROM emp WHERE empno 0 AND EXISTS (SELECT x FROM dept WHERE dept.deptno = emp.deptno AND loc = melb);8.用NOTEXISTS替代NOTIN在子查詢中,NOTIN子句將執(zhí)行一個(gè)內(nèi)部的排序和合并.無論在哪種情況下,NOTIN都是最低效的(因?yàn)樗鼘?duì)子查詢中的表執(zhí)行了一個(gè)全表遍歷).為了避免使用NOTIN,我們可以把它改寫成外連接(OuterJoins)或NOTEXISTS.例如:SELECTFROMEMPWHEREDEPT_NONOTIN(SELECTDEPT_NOFROMDEPTWHEREDEPT_CAT=A);Sql代碼-為了提高效率改寫為: (方法一: 高效)SELECT FROM emp a, dept b WHERE a.dept_no = b.dept AND b.dept_no IS NULL AND b.dept_cat = a;- (方法二: 最高效)SELECT FROM emp e WHERE NOT EXISTS (SELECT x FROM dept d WHERE d.dept_no = e.dept_no AND dept_cat = a);9.用EXISTS替換DISTINCT當(dāng)提交一個(gè)包含一對(duì)多表信息(比如部門表和雇員表)的查詢時(shí),避免在SELECT子句中使用DISTINCT.一般可以考慮用EXIST替換例如:-低效:SELECT DISTINCT dept_no, dept_name FROM dept d, emp e WHERE d.dept_no = e.dept_no;-高效:SELECT dept_no, dept_name FROM dept d WHERE EXISTS (SELECT x FROM emp e WHERE e.dept_no = d.dept_no);-EXISTS 使查詢更為迅速,因?yàn)镽DBMS核心模塊將在子查詢的條件一旦滿足后,立刻返回結(jié)果.10.用索引提高效率索引是表的一個(gè)概念部分,用來提高檢索數(shù)據(jù)的效率,實(shí)際上ORACLE使用了一個(gè)復(fù)雜的自平衡B-tree結(jié)構(gòu),通常通過索引查詢數(shù)據(jù)比全表掃描要快,當(dāng)ORACLE找出執(zhí)行查詢和Update語句的最佳路徑時(shí),ORACLE優(yōu)化器將使用索引,同樣在聯(lián)結(jié)多個(gè)表時(shí)使用索引也可以提高效率,另一個(gè)使用索引的好處是,它提供了主鍵(primarykey)的唯一性驗(yàn)證,除了那些LONG或LONGRAW數(shù)據(jù)類型,你可以索引幾乎所有的列.通常,在大型表中使用索引特別有效.當(dāng)然,你也會(huì)發(fā)現(xiàn),在掃描小表時(shí),使用索引同樣能提高效率,雖然使用索引能得到查詢效率的提高,但是我們也必須注意到它的代價(jià).索引需要空間來存儲(chǔ),也需要定期維護(hù),每當(dāng)有記錄在表中增減或索引列被修改時(shí),索引本身也會(huì)被修改,這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5次的磁盤I/O,因?yàn)樗饕枰~外的存儲(chǔ)空間和處理,那些不必要的索引反而會(huì)使查詢反應(yīng)時(shí)間變慢注:定期的重構(gòu)索引是有必要的.11.避免在索引列上使用計(jì)算WHERE子句中,如果索引列是函數(shù)的一部分,優(yōu)化器將不使用索引而使用全表掃描.舉例:-低效:SELECT FROM dept WHERE sal * 12 25000;-高效:SELECT FROM dept WHERE sal 25000 / 12;12.用=替代-如果D
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度廚具產(chǎn)品出口退稅合同4篇
- 漯河2024年河南漯河市民政局事業(yè)單位引進(jìn)高層次人才1人筆試歷年參考題庫附帶答案詳解
- 湛江廣東湛江市綠塘河濕地公園管理處招聘工作人員筆試歷年參考題庫附帶答案詳解
- 泰州2025年江蘇泰州興化市部分高中學(xué)校校園招聘教師22人筆試歷年參考題庫附帶答案詳解
- 江蘇中國中煤能源集團(tuán)有限公司江蘇分公司2025屆高校畢業(yè)生第二次招聘6人筆試歷年參考題庫附帶答案詳解
- 汕頭2025年廣東汕頭市龍湖區(qū)司法局招聘司法協(xié)理員專項(xiàng)臨聘人員筆試歷年參考題庫附帶答案詳解
- 昆明2025年云南昆明市精神衛(wèi)生防治醫(yī)院招聘編外工作人員筆試歷年參考題庫附帶答案詳解
- 2025版無固定期限勞動(dòng)合同示范文本(員工晉升專用)3篇
- 二零二五年度智能網(wǎng)聯(lián)汽車技術(shù)合作合同2篇
- 2025年魯人新版七年級(jí)歷史下冊(cè)月考試卷
- 2025年N1叉車司機(jī)考試試題(附答案)
- 《醫(yī)院財(cái)務(wù)分析報(bào)告》課件
- 2025老年公寓合同管理制度
- 2024-2025學(xué)年人教版數(shù)學(xué)六年級(jí)上冊(cè) 期末綜合卷(含答案)
- 2024中國汽車后市場(chǎng)年度發(fā)展報(bào)告
- 感染性腹瀉的護(hù)理查房
- 天津市部分區(qū)2023-2024學(xué)年高二上學(xué)期期末考試 物理 含解析
- 《人工智能基礎(chǔ)》全套英語教學(xué)課件(共7章)
- GB/T 35613-2024綠色產(chǎn)品評(píng)價(jià)紙和紙制品
- 2022-2023學(xué)年五年級(jí)數(shù)學(xué)春季開學(xué)摸底考(四)蘇教版
- 【螞蟻保】2024中國商業(yè)醫(yī)療險(xiǎn)發(fā)展研究藍(lán)皮書
評(píng)論
0/150
提交評(píng)論