




全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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在解析的過(guò)程中,會(huì)將“”依次轉(zhuǎn)換成所有的列名,這個(gè)工作是通過(guò)查詢數(shù)據(jù)字典完成的,這意味著將耗費(fèi)更多的時(shí)間.2.使用DECODE函數(shù)來(lái)減少處理時(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)用來(lái)存放可以被恢復(fù)的信息,如果你沒(méi)有COMMIT事務(wù),ORACLE會(huì)將數(shù)據(jù)恢復(fù)到刪除之前的狀態(tài)(準(zhǔn)確地說(shuō)是恢復(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)然如果可以通過(guò)索引檢索,對(duì)索引列的計(jì)數(shù)仍舊是最快的.例如COUNT(EMPNO)6.用Where子句替換HAVING子句避免使用HAVING子句,HAVING只會(huì)在檢索出所有記錄之后才對(duì)結(jié)果集進(jìn)行過(guò)濾,這個(gè)處理需要排序、總計(jì)等操作,如果能通過(guò)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)部的排序和合并.無(wú)論在哪種情況下,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è)概念部分,用來(lái)提高檢索數(shù)據(jù)的效率,實(shí)際上ORACLE使用了一個(gè)復(fù)雜的自平衡B-tree結(jié)構(gòu),通常通過(guò)索引查詢數(shù)據(jù)比全表掃描要快,當(dāng)ORACLE找出執(zhí)行查詢和Update語(yǔ)句的最佳路徑時(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à).索引需要空間來(lái)存儲(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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025家具購(gòu)買合同范本
- 結(jié)腸脂肪瘤的臨床護(hù)理
- 2025家電購(gòu)買合同樣本
- 2025年國(guó)家電網(wǎng)招聘之電工類通關(guān)考試題庫(kù)帶答案解析
- 2025年度出版物銷售合同協(xié)議
- 初中歷史明朝的滅亡和清朝的建立 課件 +2024-2025學(xué)年統(tǒng)編版七年級(jí)歷史下冊(cè)
- 鐮刀型細(xì)胞貧血病的臨床護(hù)理
- 書寫痙攣的臨床護(hù)理
- 小兒膽道蛔蟲癥的臨床護(hù)理
- 第三型腹膜炎的臨床護(hù)理
- 2025年高考?xì)v史總復(fù)習(xí)高中歷史必修二八大專題知識(shí)復(fù)習(xí)提綱
- 2025事業(yè)單位考試題庫(kù)及答案200題
- 臨床執(zhí)業(yè)醫(yī)師考試健康教育技能試題及答案
- 機(jī)車車輛試題及答案
- 地理澳大利亞課件-2024-2025學(xué)年人教版(2024)初中地理七年級(jí)下冊(cè)
- 常用施工規(guī)定和技術(shù)要求1
- 旅游景區(qū)娛樂(lè)服務(wù)設(shè)計(jì)
- 亞馬遜店鋪轉(zhuǎn)讓合同標(biāo)準(zhǔn)文本
- T-CQAP 4002-2024 醫(yī)療安全(不良)事件根本原因分析法活動(dòng)指南
- 利用科學(xué)史進(jìn)行高中生物學(xué)主線式情境教學(xué)的實(shí)踐研究
- 2025年高考作文備考:十大熱點(diǎn)人物事跡+高分素材
評(píng)論
0/150
提交評(píng)論