用已排序指示來指定一種連接排序
你可以設(shè)定優(yōu)化器評估的排列數(shù)的上限。但是對復(fù)雜的情況下,即使允許的排列數(shù)很大,優(yōu)化器也很可能在遠遠沒有找到一個比較合適的排列之間就已經(jīng)停止優(yōu)化了。你不妨回頭看看我前面舉的那個例子(15個需要連接的表有超過一萬億種排列)。如果設(shè)定優(yōu)化器考慮80,000種排列,那么這僅僅考慮了所有可能性的0.000006%,優(yōu)化器極可能沒有達到最佳的排列。
在Oracle SQL中解決這個問題的最好方法就是手工指定一種表格連接順序。這里需要遵循的大原則就是表格連接順序應(yīng)該使得查詢計劃盡快得以建立,通常在SQL語句中使用WHERE限制子句。
下面以一個對名為emp的表格的并行查詢?yōu)槔,例子中的代碼強制查詢計劃執(zhí)行一個嵌套循環(huán)連接(nested loop join)。注意,我使用了已排序指示來引導(dǎo)優(yōu)化器來評估WHERE子句中給出的表格的連接順序。
select /*+ ordered use_nl(bonus) parallel(e, 4) */
e.ename,
hiredate,
b.comm.
from
emp e,
bonus b
where
e.ename = b.ename
;
更多軟考資料請訪問:考試吧軟件水平考試欄目
希望與更多網(wǎng)友交流,請進入考試吧軟件水平考試論壇