數(shù)據(jù)庫系統(tǒng)2-7:查詢優(yōu)化的一般準(zhǔn)則

字號(hào):

為了提高查詢效率,下面給出改進(jìn)查詢的有關(guān)方法:
    1. 選擇運(yùn)算盡可能先做
    選擇運(yùn)算是查詢中出現(xiàn)最頻繁的一種運(yùn)算,先做選擇運(yùn)算可大大減少運(yùn)算中間結(jié)果、減少運(yùn)算量和從外存儲(chǔ)器讀塊的次數(shù),從而可使時(shí)間節(jié)約幾個(gè)數(shù)量級(jí)。
    2.在執(zhí)行連接之前先對(duì)文件適當(dāng)?shù)仡A(yù)處理。預(yù)處理的方法有:
    a)對(duì)文件先做排序
    b)在準(zhǔn)備連接的屬性上建立索引
    在連接運(yùn)算之前,對(duì)文件進(jìn)行預(yù)處理,系統(tǒng)能快速有效地找到要連接的元組,從而達(dá)到節(jié)約運(yùn)算時(shí)間的目的。雖然建立分類和倒排索引文件需要花費(fèi)時(shí)間,但查詢是一個(gè)很普遍的運(yùn)算,總體上講是合算的。
    3. 同時(shí)計(jì)算一串投影運(yùn)算或一串選擇運(yùn)算,避免分開造成重復(fù)掃描文件,以便節(jié)約運(yùn)算時(shí)間。
    4. 把投影同其前或后的雙目運(yùn)算(∪、-、X、>< )結(jié)合起來同時(shí)運(yùn)行,同樣可避免重復(fù)掃描文件。
    5. 把某些選擇同它前面要執(zhí)行的乘積結(jié)合起來成為一個(gè)連接運(yùn)算,使選擇與乘積一起完成,成為一個(gè)有選擇的連接。另一方面避免了再次掃描乘積后容量龐大的中間關(guān)系,從而大大節(jié)省運(yùn)算時(shí)間。
    6. 找出公共子表達(dá)式,并存貯公共的子表達(dá)式。
    若一個(gè)反復(fù)出現(xiàn)的公共表達(dá)式的結(jié)果不是一個(gè)很大的關(guān)系,且從外存讀入它的時(shí)間小于計(jì)算它的時(shí)間時(shí),可將其結(jié)果存入外存,以后若遇到該表達(dá)式時(shí)不必計(jì)算而直接將其調(diào)出,從而達(dá)到節(jié)約操作時(shí)間的目的。這種方法對(duì)公共子表達(dá)式出現(xiàn)頻繁的查詢效果更好。