泰克北大青鳥信息技術_第1頁
泰克北大青鳥信息技術_第2頁
泰克北大青鳥信息技術_第3頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

查詢的其他優(yōu)化方ORACLEFROMFROM擇記錄條數(shù)最少的表作為基礎表。如果有3個以上的表連接查詢,那就需要選擇交叉表(intersectiontable)作為基礎表,交叉表是指那個被其他表所的表.WHERE條件之前,那些可以過濾掉最大數(shù)量記錄的條件必須寫在WHERE子句的末尾.SELECT*字典完成的,這意味著將耗費的時間SQL*PlusSQL*FormsPro*CARRAYSIZE數(shù)據(jù)庫的檢索數(shù)據(jù)量,建議值為200最高效的刪除重復記錄方法(因為使用了ROWID)例子:DELETEFROMEMPEWHEREE.ROWID(SELECTMIN(X.ROWID)FROMEMPXWHEREX.EMP_NO=E.EMP_NO);TRUNCATE替代rollbacksegmentsCOMMIT,ORACLETRUNCATE只在刪除全表適用,TRUNCATE是DDL不是DML)COMMIT所釋放的資源:redologbuffer避免使用HAVING子句,HAVING只會在檢索出所有記錄之后才對結果集進行過濾.這WHERE子句限制記錄的數(shù)目,那就能減少這方面oracle中)on、where、having這三個都可以加條件的子句中,on是最先執(zhí)行,where,havingon是先把不符合條件的記錄過濾后才進行統(tǒng)計,它sumonSELECTTAB_NAMEFROMTABLESWHERE(TAB_NAME,DB_VER)=(TAB_NAME,DB_VERFROMTAB_COLUMNSWHEREVERSION=一來,就可以減少解析的時間并減少那些由Column歧義引起的語法錯誤.EXISTSINNOTEXISTSNOTEXISTS(NOTEXISTSNOTINNOTIN的表執(zhí)行了一個全表遍歷).為了避免使用NOTIN我們可以把它改寫成外連接(OuterJoins)或NOTEXISTS.(高效)SELECT*FROMEMPWHEREEMPNO0ANDEXISTSSELECTX'FROMDEPTWHEREDEPT.DEPTNO=EMP.DEPTNOANDLOC=‘MELB')(低效)SELECT*FROMEMPWHEREEMPNO0ANDDEPTNOIN(SELECTDEPTNOFROMDEPTWHERELOC=‘MELB')SELECTEXECUTIONS,DISK_READS,BUFFER_GETS,FROMV$SQLAREAWHEREEXECUTIONS>0ANDBUFFER_GETS>AND(BUFFER_GETS-DISK_READS)/BUFFER_GETS<0.8ORDERBY4DESC;B-tree結構.通常,通過索引查詢數(shù)據(jù)比全表掃描要快.當ORACLE找出執(zhí)行查詢和Update語句的最佳路徑時,ORACLE優(yōu)化器將使用索引.同樣在聯(lián)結多個表時使用索引也另一個使用索引的好處是,它提供了主鍵(primarykey)的唯一性驗證.。那些LONG或LONGRAW數(shù)據(jù)類型,你可以索引幾乎所有的列.通常,在大型表中使用索引特別有效.當然,你也會發(fā)現(xiàn),在掃描小表時,使用索引同樣能提高效率.雖然使用索引能得到查詢效率的提高,但是我們也必須注意到它的代價.索引需要空間來,也需要定期,每當有INSERTDELETE,UPDATE將為此多付出4,5次的磁盤I/O.因為索引需要額外的空間和處ALTERINDEXINDEXNAMEREBUILDTABLESPACENAME>(18)用EXISTS替換DISTINCT:SELECT塊將在子查詢的條件一旦滿足后,立刻返回結果.例子:SELECTDISTINCTDEPT_NO,DEPT_NAMEFROMDEPTD,EMPEWHERED.DEPT_NO=E.DEPT_NOSELECTDEPT_NO,DEPT_NAMEFROMDEPTDWHEREEXISTS(SELECTFROMEMPEWHEREE.DEPT_NO=sqloraclesqlSELECT…FROMDEPTWHERESAL*12>SELECT…FROMDEPTWHERESAL>SELECT*FROMEMPWHEREDEPTNOSELECT*FROMEMPWHEREDEPTNODEPTNO=3DEPT3UNIONWHEREORORcolumn查詢效率可能會因為你沒有選擇ORLOC_ID和REGIONSELECTLOC_ID,LOC_DESC,REGIONFROMLOCATIONWHERELOC_ID=10SELECTLOC_ID,LOC_DESC,REGIONFROMLOCATIONWHEREREGION=SELECTLOC_ID,LOC_DESC,REGIONFROMLOCATIONWHERELOC_ID=10ORREGION=SELECT….FROMLOCATIONWHERELOC_ID=10ORLOC_ID=20ORLOC_ID=SELECT…FROMLOCATIONWHERELOC_ININISNULLISNOT避免在索引中使用任何可以為空的列,ORACLE將無法使用該索引.對于單列索引,如ABA,B123,null)ORACLE1000都是空!因為空值不存在于索引列中,所以WHERE子句中對索引列進行空值比較將使ORACLE停用該索引.SELECT…FROMDEPARTMENTWHEREDEPT_CODEISNOTSELECT…FROMDEPARTMENTWHEREDEPT_CODE如果索引是建立在多個列上,只有在它的第一個列(leadingcolumnwhere子句引時,優(yōu)化器使用了全表掃描而忽略了索引SQLUNIONUNION-ALLUNIONALLUNION,UNIONALLUNION下面的SQL可以用來查詢排序的消耗量SELECTACCT_NUM,BALANCE_AMTFROMDEBIT_TRANSACTIONSWHERETRAN_DATE='31-DEC-95'SELECTACCT_NUM,BALANCE_AMTFROMDEBIT_TRANSACTIONSWHERETRAN_DATE='31-DEC-95'SELECTACCT_NUM,BALANCE_AMTFROMDEBIT_TRANSACTIONSWHERETRAN_DATE='31-DEC-95'UNIONALLSELECTACCT_NUM,BALANCE_AMTFROMDEBIT_TRANSACTIONSWHERETRAN_DATE='31-DEC-95'WHEREORDERORDERBY中所有的列必須定義為非空.DEPT_CODEPKNOTNULLDEPT_DESCNOTNULLDEPT_TYPENULLSELECTDEPT_CODEFROMDEPTORDERBYSELECTDEPT_CODEFROMDEPTWHEREDEPT_TYPE>假設EMPNO是一個數(shù)值類型的索引列.SELECT…FROMEMPWHEREEMPNO=SELECT…FROMEMPWHEREEMPNO=現(xiàn)在,假設EMP_TYPE是一個字符類型的索引列.SELECT…FROMEMPWHEREEMP_TYPE=SELECT…FROMEMP因為內(nèi)部發(fā)生的類型轉換,這個索引將不會被用到!為了避免ORACLE對你的SQL進行ORACLE(2)||執(zhí)行耗費資源的排序(SORT)功能.DISTINCT需要一次排序操作,而其他的至少需要執(zhí)UNION,MINUSINTERSECT的SQLSORT_AREA_S

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論