上面的例子要求優(yōu)化器按照SQL語句中FROM子句指定的順序連接表格,F(xiàn)ROM子句中第一個的表格指定為驅動表格(driving table)。已排序指示常常與其它指示聯(lián)合使用以確保多個表格按照適當?shù)捻樞蜻B接起來。在遇到涉及四個以上表格的數(shù)據(jù)倉庫查詢時常常也是這樣處理。
下面另給出一個例子,在這個例子中,我們使用一個已排序指示(ordered hint)來把表格按照一個特定的順序(先是emp,然后是dep和sal,最后是bonus)連接起來。進一步改進執(zhí)行計劃,我指定emp表格到dept表格的連接使用hash連接,sal表格到bonus表格使用嵌套循環(huán)連接。
select /*+ ordered use_hash (emp, dept) use_nl (sal, bonus) */
from
emp,
dept,
sal,
bonus
where . . .
對實際應用的建議
在實際應用場合下,減小optimizer_max_permutations參數(shù)并使用已保存的優(yōu)化計劃或者已保存綱要(這樣在查詢涉及到許多表格時,就可以避免重新解析查詢所花費的實際)會更有效率。一旦找到最好的表格連接順序,你可以手工指定表格的連接順序(通過已排序指示)并保存綱要,這樣就永久保存該表格連接順序。
當執(zhí)行一個新的查詢時,你可以首先把optimizer_search_limit設置為該查詢所涉及的表格數(shù),這樣優(yōu)化器將從所有的連接順序中找出最佳的那種。以后執(zhí)行該查詢時,你就可以在WHERE子句中按照最佳連接順序排列表格名稱,并設置已保存指示和已保存綱要,這樣就可以按照最佳順序連接表格而無需重復評估各種可能排序。這樣查詢的速度將會得到顯著的提高。
已排序指示的優(yōu)先級高于optimizer_search_limit和 optimizer_max_permutations參數(shù)。如果設置了已排序指示,那么表格就會按照查詢命令中的FROM子句給出的順序連接,這樣這個過程就沒有優(yōu)化器優(yōu)化表格的連接順序這一步驟了。
作為Oracle的專業(yè)人士,你應該知道SQL語句進入庫cache中有一個明顯的起始延時。但是聰明的Oracle數(shù)據(jù)庫管理員以及Oracle開發(fā)者能改變表格的搜索限制參數(shù)或者利用已排序指示來手工指定表格的連接順序,這樣可以極大的降低優(yōu)化以及執(zhí)行新查詢所花費的時間。
更多軟考資料請訪問:考試吧軟件水平考試欄目
希望與更多網(wǎng)友交流,請進入考試吧軟件水平考試論壇
- 推薦給朋友
- 收藏此頁
·教你調整Oracle數(shù)據(jù)庫服務器的性能 (2007-1-25 16:15:36)
·SQL SERVER優(yōu)化建議 (2007-1-25 16:13:03)
·Oracle SQL語句優(yōu)化技術分析 (2007-1-25 16:09:20)
·Excel數(shù)據(jù)透視表使用方法精要12點(中文對照) (2007-1-25 16:06:31)
·Oracle數(shù)據(jù)庫性能優(yōu)化技術 (2007-1-25 16:00:58)
如果軟件水平考試網(wǎng)所轉載內容不慎侵犯了您的權益,請與我們聯(lián)系,我們將會及時處理。如轉載本軟件水平考試網(wǎng)內容,請注明出處。