關(guān)系表達(dá)式的優(yōu)化過程:輸入一個(gè)關(guān)系表達(dá)式的語法樹;輸出一個(gè)計(jì)算該表達(dá)式的程序。
方法:
1. 利用關(guān)系代數(shù)等價(jià)變換規(guī)則4(選擇串接定理)把形如
σ-F1ùF2。。。ùFn ( E ) 等價(jià)變換為σ-F1(σ-F2( …. σ-Fn ( E ) …..) 使選擇操作可以靈活方便地沿查詢樹移動(dòng)。
2. 對(duì)每個(gè)選擇,利用關(guān)系代數(shù)等價(jià)變換規(guī)則4~8,盡可能把它移到樹的葉端。
3. 對(duì)每個(gè)投影利用關(guān)系代數(shù)等價(jià)變換規(guī)則3、5、9、10中的一般形式盡可能把它移至樹的葉端。其中規(guī)則3可使一些投影消失;規(guī)則5可把投影推到葉端;規(guī)則9可先做投影后做笛卡兒積;規(guī)則10是投影對(duì)并的分配,可以利用它將投影推向葉端。若投影針對(duì)表達(dá)式的全部屬性,則可消去這一投影運(yùn)算。
4. 利用關(guān)系代數(shù)等價(jià)變換規(guī)則3、4、5對(duì)選擇和投影進(jìn)行串接和合并,將其合并成單選擇、單投影或單選擇后跟一個(gè)投影等三種情況。使多選擇或多投影能同時(shí)執(zhí)行或在一次掃描過程中同時(shí)完成。
5. 把上述得到的語法樹的內(nèi)結(jié)點(diǎn)分組,每一雙目運(yùn)算(∪、-、X、>< )與其直接祖先的一目運(yùn)算結(jié)點(diǎn)(不超過別的二目運(yùn)算結(jié)點(diǎn))分在同一組;如果它的子孫結(jié)點(diǎn)一直通到葉結(jié)點(diǎn)都是一目運(yùn)算(σ-、?),則將它歸入該組中。但當(dāng)二目運(yùn)算是笛卡兒積(X),且其后的選擇不能與它結(jié)合為等值連接時(shí),其后的單目運(yùn)算就單獨(dú)分為一組。
6. 生成一個(gè)程序,每個(gè)結(jié)點(diǎn)的計(jì)算為程序的一步。
方法:
1. 利用關(guān)系代數(shù)等價(jià)變換規(guī)則4(選擇串接定理)把形如
σ-F1ùF2。。。ùFn ( E ) 等價(jià)變換為σ-F1(σ-F2( …. σ-Fn ( E ) …..) 使選擇操作可以靈活方便地沿查詢樹移動(dòng)。
2. 對(duì)每個(gè)選擇,利用關(guān)系代數(shù)等價(jià)變換規(guī)則4~8,盡可能把它移到樹的葉端。
3. 對(duì)每個(gè)投影利用關(guān)系代數(shù)等價(jià)變換規(guī)則3、5、9、10中的一般形式盡可能把它移至樹的葉端。其中規(guī)則3可使一些投影消失;規(guī)則5可把投影推到葉端;規(guī)則9可先做投影后做笛卡兒積;規(guī)則10是投影對(duì)并的分配,可以利用它將投影推向葉端。若投影針對(duì)表達(dá)式的全部屬性,則可消去這一投影運(yùn)算。
4. 利用關(guān)系代數(shù)等價(jià)變換規(guī)則3、4、5對(duì)選擇和投影進(jìn)行串接和合并,將其合并成單選擇、單投影或單選擇后跟一個(gè)投影等三種情況。使多選擇或多投影能同時(shí)執(zhí)行或在一次掃描過程中同時(shí)完成。
5. 把上述得到的語法樹的內(nèi)結(jié)點(diǎn)分組,每一雙目運(yùn)算(∪、-、X、>< )與其直接祖先的一目運(yùn)算結(jié)點(diǎn)(不超過別的二目運(yùn)算結(jié)點(diǎn))分在同一組;如果它的子孫結(jié)點(diǎn)一直通到葉結(jié)點(diǎn)都是一目運(yùn)算(σ-、?),則將它歸入該組中。但當(dāng)二目運(yùn)算是笛卡兒積(X),且其后的選擇不能與它結(jié)合為等值連接時(shí),其后的單目運(yùn)算就單獨(dú)分為一組。
6. 生成一個(gè)程序,每個(gè)結(jié)點(diǎn)的計(jì)算為程序的一步。