新聞中心
在oracle查詢過(guò)程中,對(duì)那些連接了很多表的查詢,Oracle需要花費(fèi)大量的時(shí)間來(lái)檢測(cè)連接這些表的適當(dāng)順序。 oracle查詢中表的連接順序成為了我們需要思考的問(wèn)題。

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


咨詢
建站咨詢
