上面的例子要求優(yōu)化器按照SQL語句中FROM子句指定的順序連接表格,F(xiàn)ROM子句中第一個的表格指定為驅(qū)動表格(driving table)。已排序指示常常與其它指示聯(lián)合使用以確保多個表格按照適當(dāng)?shù)捻樞蜻B接起來。在遇到涉及四個以上表格的數(shù)據(jù)倉庫查詢時常常也是這樣處理。
下面另給出一個例子,在這個例子中,我們使用一個已排序指示(ordered hint)來把表格按照一個特定的順序(先是emp,然后是dep和sal,最后是bonus)連接起來。進(jìn)一步改進(jìn)執(zhí)行計劃,我指定emp表格到dept表格的連接使用hash連接,sal表格到bonus表格使用嵌套循環(huán)連接。
select /*+ ordered use_hash (emp, dept) use_nl (sal, bonus) */
from
emp,
dept,
sal,
bonus
where . . .
對實(shí)際應(yīng)用的建議
在實(shí)際應(yīng)用場合下,減小optimizer_max_permutations參數(shù)并使用已保存的優(yōu)化計劃或者已保存綱要(這樣在查詢涉及到許多表格時,就可以避免重新解析查詢所花費(fèi)的實(shí)際)會更有效率。一旦找到最好的表格連接順序,你可以手工指定表格的連接順序(通過已排序指示)并保存綱要,這樣就永久保存該表格連接順序。
當(dāng)執(zhí)行一個新的查詢時,你可以首先把optimizer_search_limit設(shè)置為該查詢所涉及的表格數(shù),這樣優(yōu)化器將從所有的連接順序中找出最佳的那種。以后執(zhí)行該查詢時,你就可以在WHERE子句中按照最佳連接順序排列表格名稱,并設(shè)置已保存指示和已保存綱要,這樣就可以按照最佳順序連接表格而無需重復(fù)評估各種可能排序。這樣查詢的速度將會得到顯著的提高。
已排序指示的優(yōu)先級高于optimizer_search_limit和 optimizer_max_permutations參數(shù)。如果設(shè)置了已排序指示,那么表格就會按照查詢命令中的FROM子句給出的順序連接,這樣這個過程就沒有優(yōu)化器優(yōu)化表格的連接順序這一步驟了。
作為Oracle的專業(yè)人士,你應(yīng)該知道SQL語句進(jìn)入庫cache中有一個明顯的起始延時。但是聰明的Oracle數(shù)據(jù)庫管理員以及Oracle開發(fā)者能改變表格的搜索限制參數(shù)或者利用已排序指示來手工指定表格的連接順序,這樣可以極大的降低優(yōu)化以及執(zhí)行新查詢所花費(fèi)的時間。
更多軟考資料請訪問:考試吧軟件水平考試欄目
希望與更多網(wǎng)友交流,請進(jìn)入考試吧軟件水平考試論壇
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |