下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
基于sql的信息數(shù)據(jù)庫優(yōu)化研究
數(shù)據(jù)庫在數(shù)據(jù)庫領(lǐng)域是領(lǐng)先地位的,數(shù)據(jù)庫利用率超過40%。它被廣泛應(yīng)用于公司和機構(gòu)管理的各個方面。ORACLE不僅在海量數(shù)據(jù)集中處理方面表現(xiàn)突出,而且大量用于銀行、民航、鐵路、電信等部門的聯(lián)機事務(wù)處理(OLTP)以及聯(lián)機分析處理(OLAP)中。在聯(lián)機事務(wù)處理中,查詢操作是各種數(shù)據(jù)庫操作中使用頻率最高的,而查詢操作所基于的SELECT語句在SQL語句中又是代價最大的語句。在數(shù)據(jù)量比較小的時候,感覺不出SQL語句各種寫法的性能優(yōu)劣,對于海量數(shù)據(jù),劣質(zhì)SQL語句和優(yōu)質(zhì)SQL語句之間的速度差別可以達到上百倍。當(dāng)數(shù)據(jù)庫表的數(shù)據(jù)積累到上百萬甚至上千萬條記錄時,全表掃描一次往往需要數(shù)十分鐘,甚至數(shù)小時。如果采用添加索引等更好的查詢策略,往往可以使查詢時間降為幾分鐘。因此,對于一個數(shù)據(jù)庫應(yīng)用系統(tǒng),尤其是聯(lián)機事務(wù)處理系統(tǒng),不僅要界面友好、功能齊全,而且要優(yōu)化數(shù)據(jù)庫性能,提高系統(tǒng)的響應(yīng)速度。1應(yīng)用程序的優(yōu)化數(shù)據(jù)庫的優(yōu)化通常可以能過對網(wǎng)絡(luò)、硬件、操作系統(tǒng)、數(shù)據(jù)庫參數(shù)和應(yīng)用程序的優(yōu)化來進行。常見的優(yōu)化手段是對硬件資源的調(diào)整,如更多的磁盤、內(nèi)存、高速緩存CPU等;還有對RDBMS資源調(diào)整,如增加高速緩存區(qū)、共享內(nèi)存池等。但是,對網(wǎng)絡(luò)、硬件、操作系統(tǒng)、數(shù)據(jù)庫參數(shù)進行優(yōu)化獲得的性能提升,全部加起來只占數(shù)據(jù)庫系統(tǒng)性能提升的40%左右,60%系統(tǒng)性能提升來自對應(yīng)用程序的優(yōu)化。應(yīng)用程序的優(yōu)化通??煞譃閮蓚€方面:源代碼和SQL語句。源代碼的優(yōu)化要求管理員不僅熟悉特定的SQL語句,還要熟悉應(yīng)用程序的功能和處理邏輯,在時間成本和風(fēng)險上代價很高;為獲得性能優(yōu)化的應(yīng)用程序,必須從優(yōu)化SQL語句開始。2sql句子的優(yōu)化·不良的SQL語句以低效方式訪問數(shù)據(jù)庫,導(dǎo)致不必要的數(shù)據(jù)掃描和通過網(wǎng)絡(luò)傳輸不必要的數(shù)據(jù),消耗大量數(shù)據(jù)庫資源?!QL語句優(yōu)化是應(yīng)用程序優(yōu)化的基礎(chǔ)和前提?!QL語句獨立于程序設(shè)計邏輯,對SQL語句進行優(yōu)化不會影響程序邏輯?!QL語句實現(xiàn)同樣功能有不同寫法,在性能上的差異非常大。SQL優(yōu)化途徑:系統(tǒng)優(yōu)化,用戶查詢計劃優(yōu)化SQL語句的優(yōu)化是將性能低下的SQL語句轉(zhuǎn)換成為目的相同的、性能優(yōu)異的SQL語句。在Oracle中,系統(tǒng)采用基于成本的和基于規(guī)則的方法優(yōu)化用戶所提交的SQL語句,即由用戶提交的SQL語句是系統(tǒng)優(yōu)化的基礎(chǔ),用戶所寫語句的優(yōu)劣至關(guān)重要,一個好的查詢計劃往往可以使程序性能提高數(shù)十倍??梢圆扇∪N策略提高SQL語句的執(zhí)行速度:ue0c3合理使用索引ue0c3重寫SQL語句ue0c3重構(gòu)數(shù)據(jù)(1)建立索引compond使用索引的根本目的就是為了提高查詢效率,但索引也不是越多越好,使用索引時應(yīng)遵循以下原則:為不經(jīng)常更新的靜態(tài)大表建立索引;為查詢語句只選擇少量行的表建立索引;在經(jīng)常進行連接,但是沒有指定為外鍵的列上建立索引;在頻繁進行排序或分組(即進行orderby或groupby操作)的列上建立索引;在不同值較多的列上建立檢索;在多個待排序的列上建立復(fù)合索引(compoundindex);在沒有空值的列上建索引,在含有空值的列上即使建了索引也用不上。(2)使用opla的結(jié)果比較SQL語言使用非常靈活,同樣的應(yīng)用目的可以用不同的語句實現(xiàn),速度有快有慢。可以用EXPLAINPLAN的結(jié)果來比較兩條語句的執(zhí)行計劃和執(zhí)行成本,以決定孰優(yōu)孰劣。下面是在RACLE的SQL語句編寫查詢時的一些體會,例子所用表為ORACLE安裝時的兩張例表,一個是EMP表,含有雇員信息;另一個是DEPT表,含有部門信息。在emp表上掃描下面兩個查詢語句都返回在EMP表中沒有雇員的DEPT表中部門號,每條語句都通過子查詢訪問EMP表,假設(shè)在EMP表的DEPTNO列上已經(jīng)建立了索引。第一種寫法是:SELECTdname,deptnoFROMdeptWHEREdeptnoNOTIN(SELECTdeptnoFROMemp);盡管在EMP表的DEPTNO列上已經(jīng)建立了索引,ORACLE仍然對EMP表進行全表掃描,因為對EMP瑤子查詢沒有WHERE子句,用不上索引。全表掃描最費時。將上述語句改為下面的寫法,就會用上索引,加快執(zhí)行速度,返回結(jié)果是相同的:SELECTdname,deptnoFROMdeptWHERENOTEXISTS(SELECTdeptnoFROMempWHEREdept.deptno=emp.deptno);子查詢中的WHERE子句指向表的DEPTNO列,用上了該列索引,減小了掃描范圍,提高了查詢速度。pno含上接口信號利用外部聯(lián)接“+”,可以替代效率十分低下的notin運算,大大提高運行速度,例如,下面命令執(zhí)行起來很慢:SELECTa.empnofromempaWHEREa.empnonotin(SELECTempnoFROMempWHEREjob=`SALESMAN');倘若利用外部聯(lián)接,將命令改寫為:SELECTa.empnoFROMempa,empbWHEREa.empno=b.empno(+)ANDb.job!='SALESMAN';可以發(fā)現(xiàn),運行速度明顯提高。選擇工具和轉(zhuǎn)換在ORACLE中,LIKE關(guān)鍵字支持通配符匹配,“%”匹配多個字符,“-”匹配單個字符,如果匹配模式首字是“%”或“-”,查詢用不上索引,因此,速度要慢,例如,要求在職工表中查詢名字中包含F(xiàn)ORD的人,可以采用如下的查詢語句:SELECT*fromempWHEREenamelike'%FORD%';這里由于通配符(%)在搜尋詞首出現(xiàn),Oracle系統(tǒng)不使用ENAME的索引。當(dāng)通配符出現(xiàn)在字符串其他位置時,優(yōu)化器就能利用索引。在下面的查詢中索引得到了使用:SELECT*fromEMPwhereENAMElike'F%';通配符匹配是相對較慢的操作,有時可以把它轉(zhuǎn)換成功能相同的其他形式,如:SELECT*FROMempWHEREsalaryLIKE“98---”即使在Salary字段上建立了索引,也還是采用順序掃描的方式。如果把語句改為SELECT*FROMempWHEREsalary>“98000”,在執(zhí)行查詢時就會利用索引來查詢,會大大提高速度。在下一個句子中,盡量不使用轉(zhuǎn)換函數(shù)例如:使用WHEREa.order而不用如下形式:WHERETO=TO使用distctDISTINCT的使用引起排序操作,將降低查詢速度。or-or-or,et邏輯運算符在SQL語句的WHERE子句中,經(jīng)常使用邏輯表達式,如GREATERTHAN,LESSTHAN,EQUALTOandNOTEQUALTO等,也經(jīng)常使用AND,OR,NOT操作符,NOT邏輯運算符,如OTEQUALTO操作(〈〉),上索引,速度非常慢,通常包含NOT邏輯運算符的WHERE子句可以改寫為其他形式,例如:SELECT*FROMempWHEREsal<>3000;可以改寫為:SELECT*FROMempWHEREsal<3000orsal>3000;結(jié)果是一樣的,但第二種形式可以用上SAL列的索引,執(zhí)行速度比第一個快deptwwellenpo智能化在紐約的雇員中,哪些人的工資高于ScottSQL〉SELECTename,salFROMempWHEREdeptno=(SELECTdeptnoFROMdeptWHEREloc='NEWYORK')ANDsal>(SELECTsalFROMempWHEREename='SCOTT');用表連接實現(xiàn):SQL〉SELECTename,sal,emp.deptno,locFROMemp,deptWHEREemp.deptno=dept.deptnoANDsal〉(SELECTsalFROMempwhereANDloc='NEWYORK';對于大數(shù)據(jù)的計算,應(yīng)使用單一的sum命令可人為將數(shù)據(jù)分組,利用groupby
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025合同到期的辭職報告寫
- 成都二手住宅買賣合同參考范例
- 商業(yè)步行街工程電子合同
- 2025買賣保證合同
- 工業(yè)廠房外墻粉刷施工合同
- 防水工程監(jiān)控勞務(wù)施工合同范本
- 2025公司向個人借款合同范本「標(biāo)準(zhǔn)版」
- 2025年度二零二五年度手車轉(zhuǎn)讓與租賃經(jīng)營合同3篇
- 二零二五年度報廢醫(yī)療器械回收及無害化處理合同3篇
- 2024濕地公園水面戶外拓展訓(xùn)練中心合同
- GB/T 42752-2023區(qū)塊鏈和分布式記賬技術(shù)參考架構(gòu)
- Module 9 (教案)外研版(一起)英語四年級上冊
- 初中物理-初三物理模擬試卷講評課教學(xué)課件設(shè)計
- DG-TJ 08-2367-2021 既有建筑外立面整治設(shè)計標(biāo)準(zhǔn)
- 公文流轉(zhuǎn)單(標(biāo)準(zhǔn)模版)
- 深入淺出Oracle EBS之OAF學(xué)習(xí)筆記-Oracle EBS技術(shù)文檔
- XXX大中型公司報價管理辦法
- 四年級計算題大全(列豎式計算,可打印)
- 年會主持詞:企業(yè)年會主持詞
- LS 8010-2014植物油庫設(shè)計規(guī)范
- GB/T 9119-2000平面、突面板式平焊鋼制管法蘭
評論
0/150
提交評論