數(shù)據(jù)庫中數(shù)據(jù)查詢的實(shí)現(xiàn)_第1頁
數(shù)據(jù)庫中數(shù)據(jù)查詢的實(shí)現(xiàn)_第2頁
數(shù)據(jù)庫中數(shù)據(jù)查詢的實(shí)現(xiàn)_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

數(shù)據(jù)庫中數(shù)據(jù)查詢的實(shí)現(xiàn)

一、查詢優(yōu)化過程在數(shù)據(jù)庫應(yīng)用程序中,訪問操作是數(shù)據(jù)庫其他操作中最重要的部分。在系統(tǒng)開發(fā)過程中,如果不重視xml搜索策略,則訪問僅在初始用戶中流暢,但隨著數(shù)據(jù)庫表中記錄的累積次數(shù)的增加,系統(tǒng)的生產(chǎn)率降低,這是無法忍受的。因此,恢復(fù)優(yōu)化在很大程度上發(fā)揮著重要作用??茖W(xué)合理地構(gòu)造查詢系統(tǒng),是成功開發(fā)數(shù)據(jù)庫應(yīng)用系統(tǒng)非常重要的環(huán)節(jié)。據(jù)統(tǒng)計(jì)約有90%的性能問題是由于程序員或用戶使用了不恰當(dāng)?shù)牟樵冋Z句造成的,因此SQL語句的質(zhì)量對整個(gè)系統(tǒng)效率有重大關(guān)系。DBMS處理查詢計(jì)劃的過程是:做完查詢語句的詞法、語法檢查之后,將語句提交給DBMS的查詢優(yōu)化器,優(yōu)化器做完代數(shù)優(yōu)化和存取路徑的優(yōu)化之后。由預(yù)編譯模塊對語句進(jìn)行處理并生成查詢規(guī)劃,然后在合適的時(shí)間提交給系統(tǒng)處理執(zhí)行,最后將執(zhí)行結(jié)果返回給用戶。雖然現(xiàn)在的數(shù)據(jù)庫產(chǎn)品在查詢優(yōu)化方面已經(jīng)做得越來越好,但由用戶提交的SQL語句是系統(tǒng)優(yōu)化的基礎(chǔ),因此用戶所寫語句的優(yōu)劣至關(guān)重要。二、查詢優(yōu)化技術(shù)一個(gè)好的查詢表達(dá)式不是基于純粹的理論假設(shè)及謂詞想像出來的,而是在實(shí)際的項(xiàng)目開發(fā)過程中總結(jié)的經(jīng)驗(yàn),本文就通過幾個(gè)常用的查詢優(yōu)化方法,結(jié)合舉例來說明SQL查詢語句優(yōu)化技術(shù)。(一)正確的配置和使用索引是數(shù)據(jù)庫中重要的數(shù)據(jù)結(jié)構(gòu),是優(yōu)化的基礎(chǔ),建立索引的根本目的是提高查詢效率,索引的使用要恰到好處,其使用原則如下:1.索引通常創(chuàng)建連接列表,并使用不經(jīng)常連接的字段則由優(yōu)化器自動(dòng)生成索引;2.排序或排序字段的索引;3.索引的設(shè)置列上建立索引,在不同值少的列上不要建立索引,例如在人事信息表中的“黨員”字段中,只有兩個(gè)不同的邏輯值:.T.和.F.這兩個(gè)值,所以就沒有必要建立索引。例如:兩個(gè)表PEOPLE(編號,姓名,性別……)和WIFE(編號,姓名,性別….)命令SELECTPEOPLE.編號,PEOPLE.姓名,WIFE.編號,WIFE.姓名FROMPEOPLE,WIFEWHEREPEOPLE.編號=WIFE.編號這兩個(gè)表要進(jìn)行鏈接,就要在這兩個(gè)表上以“編號”為字段建立索引。(二)數(shù)據(jù)的兼容性最微妙的查詢問題之一就是在WHERE子句中,對具有不同類型的字段的比較,例如FLOAT與INT,CHAR與VARCHAR,BINARY與VARBINARY是不兼容的,因此要求WHERE子句中表達(dá)式的數(shù)據(jù)類型是兼容的,數(shù)據(jù)類型的不兼容可能使優(yōu)化器無法執(zhí)行一些本來可以進(jìn)行的優(yōu)化操作。例如,對于SQL語句SELECT姓名FROMPEOPLEWHERE月收入>1500由于WHERE子句中,字段月收入是貨幣型字段,而1500是整型數(shù),優(yōu)化器無法對其進(jìn)行優(yōu)化,并且DBMS要耗費(fèi)一定的時(shí)間將整型數(shù)1500轉(zhuǎn)化成貨幣型字段后,才能進(jìn)行優(yōu)化,才能與字段月收入比較。為此,在編程時(shí)可將整型數(shù)1500先轉(zhuǎn)化成貨幣型字段,而不要等到運(yùn)行時(shí)由系統(tǒng)來轉(zhuǎn)化,即語句改為:SELECT姓名FROMPEOPLEWHER月收入≥$1500(三)索引查詢“<>”是排斥性的操作符,而不是包括性的操作符,這會使系統(tǒng)無法使用索引,而只能直接搜索表中的數(shù)據(jù).例如1:SELECT姓名FROMPEOPLEWHERE月收入<>15002:SELECT姓名FROMPEOPLEWHERENOT(月收入=1500)3:SELECT姓名FROMPEOPLEWHERE月收入>1500OR月收入<1500從上面3個(gè)命令我們就可以看出第3個(gè)命令可以使用索引查詢,它的查詢速度是最快的。(四)sql句子的生成例如:SELEC姓名FROMPEOPLEWHERESUBSTR(姓名,1,2)=“李”WHERE子句中對列的任何操作結(jié)果都是在SQL語句運(yùn)行時(shí)逐列計(jì)算得到的,因此它不得不進(jìn)行表搜索,而沒有使用該列上面的索引.因此將SQL語句重寫成下面這樣:SELEC姓名FROMPEOPLEWHERE姓名LIKE“李%”這樣就提高了查詢的速度。(五)“1004”數(shù)據(jù)庫的轉(zhuǎn)化當(dāng)查詢語句中有IN關(guān)鍵詞時(shí),優(yōu)化器采用OR并列條件。例如:SELECT姓名FROMPEOPLEWHERE編號IN(“1002”,”1004”)數(shù)據(jù)庫系統(tǒng)轉(zhuǎn)化為:SELECT姓名FROMPEOPLEWHERE編號=“1002”O(jiān)R編號=“1004”在命令中,當(dāng)可以使用IN或者EXIST時(shí),EXISTS遠(yuǎn)比IN的效率高。在操作中如果把所有的IN操作符子查詢改寫為使用EXISTS的子查詢,這樣效率更高。同理,使用NOTEXIST代替NOTIN會使查詢添加限制條件,由此減少全表掃描次數(shù),從而加快查詢的速度以達(dá)到提高數(shù)據(jù)庫運(yùn)行效率。(六)直接查詢與西方查詢,低對查詢條件使用各種運(yùn)算符,數(shù)據(jù)庫系統(tǒng)在執(zhí)行時(shí),首先計(jì)算運(yùn)算表達(dá)式的值,這樣就影響系統(tǒng)的運(yùn)算速度,例如:1)SELECT*FROMPEOPLEWHERE月收入*12>240002)SELECT*FROMPEOPLEWHERE月收入>2000這兩個(gè)命令的查詢結(jié)果是一樣的,但是第一條命令首先計(jì)算表達(dá)式的值,然后再參與查詢,而第二條命令則是直接查詢,查詢效率明顯比第一條命令高。三、sql句子的編寫要求編寫優(yōu)劣S

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論