全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
Go to start of metadata 1.SELECT子句中避免使用“*”當(dāng)你想在SELECT子句中列出所有的COLUMN時,使用動態(tài)SQL列引用是一個方便的方法.不幸的是,這是一個非常低效的方法.實際上,ORACLE在解析的過程中,會將“”依次轉(zhuǎn)換成所有的列名,這個工作是通過查詢數(shù)據(jù)字典完成的,這意味著將耗費更多的時間.2.使用DECODE函數(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ù)也可以運用于GROUPBY和ORDERBY子句中.3.刪除重復(fù)記錄最高效的刪除重復(fù)記錄方法(因為使用了ROWID)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)刪除表中的記錄時,在通常情況下,回滾段(rollbacksegments)用來存放可以被恢復(fù)的信息,如果你沒有COMMIT事務(wù),ORACLE會將數(shù)據(jù)恢復(fù)到刪除之前的狀態(tài)(準(zhǔn)確地說是恢復(fù)到執(zhí)行刪除命令之前的狀況),而當(dāng)運用TRUNCATE時,回滾段不再存放任何可被恢復(fù)的信息.當(dāng)命令運行后,數(shù)據(jù)不能被恢復(fù).因此很少的資源被調(diào)用,執(zhí)行時間也會很短.5.計算記錄條數(shù)和一般的觀點相反,count(*)比count(1)稍快,當(dāng)然如果可以通過索引檢索,對索引列的計數(shù)仍舊是最快的.例如COUNT(EMPNO)6.用Where子句替換HAVING子句避免使用HAVING子句,HAVING只會在檢索出所有記錄之后才對結(jié)果集進(jìn)行過濾,這個處理需要排序、總計等操作,如果能通過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ǔ)表的查詢中,為了滿足一個條件,往往需要對另一個表進(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í)行一個內(nèi)部的排序和合并.無論在哪種情況下,NOTIN都是最低效的(因為它對子查詢中的表執(zhí)行了一個全表遍歷).為了避免使用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)提交一個包含一對多表信息(比如部門表和雇員表)的查詢時,避免在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 使查詢更為迅速,因為RDBMS核心模塊將在子查詢的條件一旦滿足后,立刻返回結(jié)果.10.用索引提高效率索引是表的一個概念部分,用來提高檢索數(shù)據(jù)的效率,實際上ORACLE使用了一個復(fù)雜的自平衡B-tree結(jié)構(gòu),通常通過索引查詢數(shù)據(jù)比全表掃描要快,當(dāng)ORACLE找出執(zhí)行查詢和Update語句的最佳路徑時,ORACLE優(yōu)化器將使用索引,同樣在聯(lián)結(jié)多個表時使用索引也可以提高效率,另一個使用索引的好處是,它提供了主鍵(primarykey)的唯一性驗證,除了那些LONG或LONGRAW數(shù)據(jù)類型,你可以索引幾乎所有的列.通常,在大型表中使用索引特別有效.當(dāng)然,你也會發(fā)現(xiàn),在掃描小表時,使用索引同樣能提高效率,雖然使用索引能得到查詢效率的提高,但是我們也必須注意到它的代價.索引需要空間來存儲,也需要定期維護(hù),每當(dāng)有記錄在表中增減或索引列被修改時,索引本身也會被修改,這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5次的磁盤I/O,因為索引需要額外的存儲空間和處理,那些不必要的索引反而會使查詢反應(yīng)時間變慢注:定期的重構(gòu)索引是有必要的.11.避免在索引列上使用計算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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 線上美術(shù)如何做課程設(shè)計
- 精準(zhǔn)脫貧課程設(shè)計
- 引流服務(wù)合同范例
- 武漢學(xué)院《電機學(xué)課程設(shè)計》2023-2024學(xué)年第一學(xué)期期末試卷
- 醫(yī)療貸款協(xié)議范本
- 合同糾紛原告所在地管轄的情形3篇
- 農(nóng)產(chǎn)品化肥與種子銷售協(xié)議3篇
- 員工離職和解協(xié)議編寫3篇
- 啤酒制造轉(zhuǎn)讓合同范例
- 地塊交易協(xié)議3篇
- 《馬克思主義發(fā)展史》題集
- 人教新目標(biāo)版英語七下Unit 11《How was your school trip》(Section A 1a-1c)教學(xué)設(shè)計
- 大話機器人智慧樹知到期末考試答案章節(jié)答案2024年青海大學(xué)
- 含新能源發(fā)電接入的電力系統(tǒng)低頻振蕩阻尼控制研究綜述
- 2024年全國甲卷高考數(shù)學(xué)(理數(shù))真題試題(原卷版+含解析)
- 電大建筑材料(A)歷年試題和答案(精)請勿轉(zhuǎn)載
- 貴州省遵義市播州區(qū)2023-2024學(xué)年八年級上學(xué)期期末學(xué)業(yè)水平監(jiān)測數(shù)學(xué)試卷(含解析)
- 國開11340《古代小說戲曲專題》期末復(fù)習(xí)資料
- 湖南省長沙市雨花區(qū)2023-2024學(xué)年五年級下學(xué)期期末考試英語試題
- 探店與商家合同擬稿
- 腐植酸類肥料項目可行性研究報告
評論
0/150
提交評論