新聞中心
在oracle查詢過程中,對那些連接了很多表的查詢,Oracle需要花費大量的時間來檢測連接這些表的適當順序。 oracle查詢中表的連接順序成為了我們需要思考的問題。

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)與策劃設(shè)計,江夏網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:江夏等地區(qū)。江夏做網(wǎng)站價格咨詢:18980820575
評估表的連接順序
在SQL語句的準備過程中,花費最多的步驟是生成執(zhí)行計劃,特別是處理有多個表連接的查詢。當Oracle評估表的連接順序時,它必須考慮到表之間所有可能的連接。例如:六個表的之間連接有720(6的階乘,或6 * 5 * 4 * 3 * 2 * 1 = 720)種可能的連接線路。
當一個oracle查詢中含有超過10個表的連接時,排列的問題將變得更為顯著。對于15個表之間的連接,需要評估的可能查詢排列將超過1萬億
(準確的數(shù)字是1,307,674,368,000)種。
使用optimizer_search_limit參數(shù)來設(shè)定限制
通過使用optimizer_search_limit參數(shù),你能夠指定被優(yōu)化器用來評估的***的連接組合數(shù)量。使用這個參數(shù),我們將能夠防止優(yōu)化器
消耗不定數(shù)量的時間來評估所有可能的連接組合。如果在oracle查詢中表的數(shù)目小于optimizer_search_limit的值,優(yōu)化器將檢查所有可能的
連接組合。
例如:有五個表連接的查詢將有120(5! = 5 * 4 * 3 * 2 * 1 = 120)種可能的連接組合,因此如果optimizer_search_limit等于5
(默認值),則優(yōu)化器將評估所有的120種可能。optimizer_search_limit參數(shù)也控制著調(diào)用帶星號的連接提示的閥值。當查詢中的表的
數(shù)目比optimizer_search_limit小時,帶星號的提示將被優(yōu)先考慮。
另一個工具:參數(shù)optimizer_max_permutations
初始化參數(shù)optimizer_max_permutations定義了優(yōu)化器所考慮組合數(shù)目的上限,且依賴于初始參數(shù)optimizer_search_limit。
optimizer_max_permutations的默認值是80,000。
參數(shù)optimizer_search_limit和optimizer_max_permutations一起來確定優(yōu)化器所考慮的組合數(shù)目的上限:除非(表或組合數(shù)目)
超過參數(shù)optimizer_search_limit 或者 optimizer_max_permutations設(shè)定的值,否則優(yōu)化器將生成所有可能的連接組合。一旦優(yōu)
化器停止評估表的連接組合,它將選擇成本***的組合。
使用ordered提示指定連接順序
你能夠設(shè)定優(yōu)化器所執(zhí)行的評估數(shù)目的上限。但是即使采用有很高價值的排列評估,我們?nèi)匀粨碛惺箖?yōu)化器可以盡早地放棄復(fù)雜的查詢
的重要機會?;叵胍幌潞?5個連接查詢的例子,它將有超過1萬億種的連接組合。如果優(yōu)化器在評估了80,000個組合后停止,那么它才
僅僅評估了0.000006%的可能組合,而且或許還沒有為這個巨大的查詢找到***的連接順序。
在Oracle SQL中解決此問題的***的方法是手工指定表的連接順序。為了盡快創(chuàng)建最小的解決方案集,這里所遵循的規(guī)則是將表結(jié)合起
來,通常優(yōu)先使用限制最嚴格的WHERE子句來連接表。
網(wǎng)頁標題:oracle查詢中表的連接順序
路徑分享:http://m.fisionsoft.com.cn/article/dhgpdhe.html


咨詢
建站咨詢
