ORACLE執(zhí)行計劃和SQL調(diào)優(yōu)知識概述_第1頁
ORACLE執(zhí)行計劃和SQL調(diào)優(yōu)知識概述_第2頁
ORACLE執(zhí)行計劃和SQL調(diào)優(yōu)知識概述_第3頁
ORACLE執(zhí)行計劃和SQL調(diào)優(yōu)知識概述_第4頁
ORACLE執(zhí)行計劃和SQL調(diào)優(yōu)知識概述_第5頁
已閱讀5頁,還剩67頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

ORACLE執(zhí)行計劃和SQL調(diào)優(yōu)內(nèi)容安排第一部分:背景知識第二部分:SQL調(diào)優(yōu)第三部分:工具介紹第一部分背景知識執(zhí)行計劃的相關(guān)概念Rowid的概念rowid是一個偽列,既然是偽列,那么這個列就不是用戶定義,而是系統(tǒng)自己給加上的。對每個表都有一個rowid的偽列,但是表中并不物理存儲ROWID列的值。不過你可以像使用其它列那樣使用它,但是不能刪除改列,也不能對該列的值進行修改、插入。一旦一行數(shù)據(jù)插入數(shù)據(jù)庫,則rowid在該行的生命周期內(nèi)是唯一的,即即使該行產(chǎn)生行遷移,行的rowid也不會改變。RecursiveSQL概念有時為了執(zhí)行用戶發(fā)出的一個sql語句,Oracle必須執(zhí)行一些額外的語句,我們將這些額外的語句稱之為‘recursivecalls’或‘recursiveSQLstatements’。如當(dāng)一個DDL語句發(fā)出后,ORACLE總是隱含的發(fā)出一些recursiveSQL語句,來修改數(shù)據(jù)字典信息,以便用戶可以成功的執(zhí)行該DDL語句。當(dāng)需要的數(shù)據(jù)字典信息沒有在共享內(nèi)存中時,經(jīng)常會發(fā)生Recursivecalls,這些Recursivecalls會將數(shù)據(jù)字典信息從硬盤讀入內(nèi)存中。用戶不比關(guān)心這些recursiveSQL語句的執(zhí)行情況,在需要的時候,ORACLE會自動的在內(nèi)部執(zhí)行這些語句。當(dāng)然DML語句也都可能引起recursiveSQL。簡單的說,我們可以將觸發(fā)器視為recursiveSQL。RowSourceandPredicateRowSource(行源):用在查詢中,由上一操作返回的符合條件的行的集合,即可以是表的全部行數(shù)據(jù)的集合;也可以是表的部分行數(shù)據(jù)的集合;也可以為對上2個rowsource進行連接操作(如join連接)后得到的行數(shù)據(jù)集合。Predicate(謂詞):一個查詢中的WHERE限制條件DrivingTableDrivingTable(驅(qū)動表):該表又稱為外層表(OUTERTABLE)。這個概念用于嵌套與HASH連接中。如果該rowsource返回較多的行數(shù)據(jù),則對所有的后續(xù)操作有負面影響。注意此處雖然翻譯為驅(qū)動表,但實際上翻譯為驅(qū)動行源(drivingrowsource)更為確切。一般說來,是應(yīng)用查詢的限制條件后,返回較少行源的表作為驅(qū)動表,所以如果一個大表在WHERE條件有有限制條件(如等值限制),則該大表作為驅(qū)動表也是合適的,所以并不是只有較小的表可以作為驅(qū)動表,正確說法應(yīng)該為應(yīng)用查詢的限制條件后,返回較少行源的表作為驅(qū)動表。在執(zhí)行計劃中,應(yīng)該為靠上的那個rowsource,后面會給出具體說明。ProbedTableProbedTable(被探查表):該表又稱為內(nèi)層表(INNERTABLE)。在我們從驅(qū)動表中得到具體一行的數(shù)據(jù)后,在該表中尋找符合連接條件的行。所以該表應(yīng)當(dāng)為大表(實際上應(yīng)該為返回較大rowsource的表)且相應(yīng)的列上應(yīng)該有索引。組合索引(concatenatedindex)由多個列構(gòu)成的索引,如createindexidx_emponemp(col1,col2,col3,……),則我們稱idx_emp索引為組合索引。在組合索引中有一個重要的概念:引導(dǎo)列(leadingcolumn),在上面的例子中,col1列為引導(dǎo)列。當(dāng)我們進行查詢時可以使用”wherecol1=?”,也可以使用”wherecol1=?andcol2=?”,這樣的限制條件都會使用索引,但是”wherecol2=?”查詢就不會使用該索引。所以限制條件中包含先導(dǎo)列時,該限制條件才會使用該組合索引??蛇x擇性(selectivity)比較一下列中唯一鍵的數(shù)量和表中的行數(shù),就可以判斷該列的可選擇性。如果該列的”唯一鍵的數(shù)量/表中的行數(shù)”的比值越接近1,則該列的可選擇性越高,該列就越適合創(chuàng)建索引,同樣索引的可選擇性也越高。在可選擇性高的列上進行查詢時,返回的數(shù)據(jù)就較少,比較適合使用索引查詢。oracle訪問數(shù)據(jù)的的存取方法全表掃描(FullTableScans,FTS)通過ROWID的表存取取(TableAccessbyROWID)索引掃描(IndexScan))索引掃描(IndexScan))索引唯一掃描描(indexuniquescan)索引范圍掃描描(indexrangescan)索引全掃描(indexfullscan)索引快速掃描描(indexfastfullscan)表訪問方式全表掃描:讀讀取表中每一一條記錄,順順序讀取;散列獲?。菏故褂梅柹⒘辛兄麈I來為帶帶有匹配散列列值表中的記記錄創(chuàng)建ROWID;;ROWID訪訪問:通過指指定的ROWID的方式式在表中選定定一個單獨的的記錄;是訪訪問記錄的最最快方式;表之間的連接接rowsource(表)之間的的連接順序?qū)τ诓樵兊男视蟹浅4蟠蟮挠绊?。通通過首先存取取特定的表,,即將該表作作為驅(qū)動表,,這樣可以先先應(yīng)用某些限限制條件,從從而得到一個個較小的rowsource,使使連接的效率率較高,這也也就是我們常常說的要先執(zhí)執(zhí)行限制條件件的原因。一一般是在將表表讀入內(nèi)存時時,應(yīng)用where子句句中對該表的的限制條件。。SQL執(zhí)行行的步驟解析:安全性性檢查,語法法檢查;創(chuàng)建:評估多多個執(zhí)行計劃劃,并選擇一一個最優(yōu)的執(zhí)執(zhí)行計劃;執(zhí)行:捆綁變變量,執(zhí)行已已經(jīng)創(chuàng)建的執(zhí)執(zhí)行計劃;獲?。韩@取結(jié)結(jié)果集,進行行轉(zhuǎn)換,排序序等;索引訪問方式式索引范圍掃描描:指從索引引中讀取多個個rowid,是最常見見到的方式;;單個索引掃描描:指從索引引中讀取一個個單獨的rowid;降序索引范圍圍掃描:指按按降序的方式式從索引中讀讀取多個rowid;導(dǎo)致排序的操操作Orderby子句句Groupby子句句Selectdistinct子子句Union或或minus操作作優(yōu)化器調(diào)用sortmergejoin操操作創(chuàng)建索引SQL優(yōu)化器器概念:是一個個為所有的sql語句創(chuàng)創(chuàng)建執(zhí)行計劃劃的工具。目的:生成最最快的,消耗耗資源最少的的執(zhí)行計劃。。兩種優(yōu)化器::基于規(guī)則的的優(yōu)化器(RBO),基基于成本的優(yōu)優(yōu)化器(CBO)。優(yōu)化器模式Rule模模式:完全基基于數(shù)據(jù)字典典生成執(zhí)行計計劃;最古老老、比較穩(wěn)定定;Choose模式:默默認(rèn)的優(yōu)化器器模式。根據(jù)據(jù)統(tǒng)計數(shù)據(jù)的的存在與否確確定調(diào)用哪一一個優(yōu)化器;;First_rows模模式:基于于成本的優(yōu)化化器模式,以以最快的速度度返回記錄;;All_rows模式式:基于成本本的優(yōu)化器模模式,確??偪傮w時間最短短,使用的資資源最?。辉O(shè)置優(yōu)化器模模式的方法Init.ora參數(shù)optimizer_mode=rule/choose/all_rows/first_rows;在會話層使用用altersessionsetoptimizer_goal=rule/choose/all_rows/first_rows;在SQL中添添加提示/*+rule/all_rows/first_rows*/設(shè)置choose模式時時候,將根據(jù)據(jù)是否存在表表或索引的統(tǒng)統(tǒng)計資料來決決定選擇RBO或CBO;第二部分SQL調(diào)整整SQL調(diào)整整的目標(biāo)去掉不必要的的大表全表掃掃描;緩存小表全表表掃描;盡量使用主機機變量代替直直接量,減少少SQL語句句的解析時間間;優(yōu)化索引的使使用;優(yōu)化表連接方方法;優(yōu)化子查詢;;常見可能導(dǎo)致致全表掃描的的操作使用null條件的查詢詢:wherexxxisnull;對沒有索引的的字段查詢;;帶有l(wèi)ike條件的查詢詢:wherexxxlike‘%x’’;帶有notequals條件的查查詢:<>,!=,notin等(除除非字段分布布不平衡,而而且存在字段段矩形圖)內(nèi)置函數(shù)使索索引無效:substr(),to_char()等;使用all_rows提提示;使用parallel提提示;基于RBO調(diào)整設(shè)置RBO模模式的方法Init.ora參數(shù)optimizer_mode=rule/choose;在會話層使用用altersessionsetoptimizer_goal=rule/choose;在SQL中添添加提示/*+rule*/設(shè)置choose模式時時候,將根據(jù)據(jù)是否存在表表或索引的統(tǒng)統(tǒng)計資料來決決定選擇RBO或CBO;RBO特性總是使用索引引(不識別位位圖索引或基基于函數(shù)的索索引)總是從驅(qū)動表表開始只有在不可避避免的情況下下,才使用全全表掃描索引選擇的隨隨機特性基于RBO的的調(diào)整原則驅(qū)動表的設(shè)置置:在RBO中,驅(qū)動表表是from子句的最后后一個表;驅(qū)驅(qū)動表應(yīng)該是是返回記錄最最少的那個表表;Where子子句設(shè)置:限限制性最強的的布爾表達式式放在最底層層;添加基于成本本的提示,來來獲得更快的的執(zhí)行計劃;;基于CBO調(diào)整設(shè)置CBO模模式的方法Init.ora參數(shù)optimizer_mode=all_rows/first_rows/choose;在會話層使用用altersessionsetoptimizer_goal=all_rows/first_rows/choose;在SQL中添添加提示/*+hint*/設(shè)置choose模式時時候,將根據(jù)據(jù)是否存在表表或索引的統(tǒng)統(tǒng)計資料來決決定選擇RBO或CBO;CBO特性性前提條件:存存在表和索引引的統(tǒng)計資料料;使用analyzetable和analyzeindex命令令從表或索引引中收集統(tǒng)計計資料(表的的記錄平均長長度,記錄數(shù)數(shù)等);如果果沒有現(xiàn)存的的統(tǒng)計資料,,將在sql運行時收集集資料,會大大大降低性能能;影響CBO執(zhí)執(zhí)行計劃成本本評估的初始始化參數(shù)較多多(optimizer_search_limit,optimizer_max_permutations,optimizer_index_caching,hash_area_size,hash_join_enable,hash_multiblock_io_count,star_transformation_enable,optimizer_index_cost_adj等))調(diào)整表連接表連接方法嵌套循環(huán)連接接(nestedloopjoin):一一個小的內(nèi)部部表和一個外外部表。比較較內(nèi)部表的每每一條記錄和和外部表的每每一條記錄,,返回滿足條條件的記錄;;散列連接(hashjoin)::為較小的表表在RAM創(chuàng)創(chuàng)建散列表((可以用來從從較大的那個個表讀取記錄錄);排序合并連接接(sortmergejoin):使用用連接字段將將兩個記錄集集排序然后合合并;星型連接(starjoin)::幾個小型表表(將組成虛虛擬表)和一一個大型事實實表,然后進進行嵌套循環(huán)環(huán)連接;表連接類型等連接:標(biāo)準(zhǔn)準(zhǔn)連接;…froma,bwherea.f1=b.f1;oracle提供nestedloop、hashjoin、sortmerge三三種連接方式式;外部連接:通通過在where子句句的等式謂詞詞展覽館放置置一個(+))來實現(xiàn);……froma,bwherea.f1=b.f1(+),將包包括b表中不不匹配的字段段;自連接:一個個表與自己連連接的情況;;…fromempa,empbwherea.f1-b.f1=10…;;經(jīng)常調(diào)用nestedloop連接;表連接類型((續(xù))反連接:指使使用包含notin或或notexists子句的子子查詢進行的的連接;默認(rèn)認(rèn)使用嵌套循循環(huán)算法;半連接:指在在子查詢中使使用in或exists子句時進行行的操作;表連接調(diào)整原原則RBO只能調(diào)調(diào)用nestedloop和mergesort連接接;hashjoin和star連接只能能在CBO中中得到;盡量不要使用用notin反連接子子查詢,把它它替換成標(biāo)準(zhǔn)準(zhǔn)等連接,用用外連接和wherecolumnisnull子子句刪除多余余的記錄;或或者盡量替換換成notexists子查詢,,因為它將調(diào)調(diào)用相關(guān)聯(lián)的的子查詢;半連接子查詢詢可以重新書書寫成標(biāo)準(zhǔn)等等連接,用selectdistinct子子句刪除重復(fù)復(fù)的記錄;表連接調(diào)整原原則(續(xù))如果驅(qū)動表較較小,可以完完全裝入hash_area_size內(nèi)存中中,使用散列列連接(hashjoin)速度度比嵌套循環(huán)環(huán)連接(nestedloop))快;在兩個表非常常大的情況下下,經(jīng)常使用用嵌套循環(huán)連連接(nestedloop);;生成大型結(jié)果果集的查詢、、不使用where子句句的大表連接接或表中無可可用索引的查查詢,經(jīng)常使使用排序合并并連接(srotmerge);;對于多個小的的維表和一個個大的事實表表的情況下((數(shù)據(jù)倉庫)),經(jīng)常使用用星型連接(star);不同表連接方方法的相對速速度星型連接嵌套循環(huán)連連接散列連接排序合并連連接連接速度連接表中記記錄的數(shù)目目少多慢快調(diào)整SQL子查詢子查詢類型型標(biāo)準(zhǔn)子查詢詢:in和和exists;反連接子查查詢:notin和notexists;關(guān)聯(lián)子查詢詢:指在子子查詢內(nèi)部部引用外部部數(shù)據(jù)表;;…fromtable1awhere…(select…fromtable2bWherea.f1=b.f1…);對于外外部數(shù)據(jù)集集的每一條條記錄,都都將重新執(zhí)執(zhí)行一次內(nèi)內(nèi)部子查詢詢;非關(guān)聯(lián)子查查詢:指在在子查詢內(nèi)內(nèi)部不會引引用外部的的數(shù)據(jù)表;;…fromtable1awhere…(select……fromtable2b…);內(nèi)部子子查詢只執(zhí)執(zhí)行一次;;子查詢調(diào)整整原則只要可能的的話,盡可可能的避免免使用子查查詢,而用用標(biāo)準(zhǔn)的連連接操作來來代替,這這樣可以使使用提示來來更改執(zhí)行行計劃;先考慮子查查詢的合法法性,再考考慮進行改改寫;使用一個關(guān)關(guān)聯(lián)子查詢詢時,in與exists子子句的子查查詢的執(zhí)行行計劃基本本相同;在外部查詢詢返回相對對較少的記記錄時,關(guān)關(guān)聯(lián)子查詢詢比非關(guān)聯(lián)聯(lián)子查詢執(zhí)執(zhí)行得更快快;子查詢調(diào)整整原則(續(xù)續(xù))在內(nèi)部子查查詢只有少少量的記錄錄時,非關(guān)關(guān)聯(lián)子查詢詢比關(guān)聯(lián)子子查詢執(zhí)行行得更快;;關(guān)聯(lián)子查詢詢使用in子句是多多余的;而而非關(guān)聯(lián)子子查詢使用用exists子句句是不恰當(dāng)當(dāng)?shù)?。使用in子子句的非關(guān)關(guān)聯(lián)子查詢詢可以轉(zhuǎn)換換為標(biāo)準(zhǔn)連連接操作以以及使用selectdistinct來刪刪除重復(fù)的的記錄;使用exists子子句的關(guān)聯(lián)聯(lián)子查詢可可以轉(zhuǎn)換為為標(biāo)準(zhǔn)連接接,但子查查詢最好只只能返回一一個記錄;;子查詢調(diào)整整原則(續(xù)續(xù))非關(guān)聯(lián)子查查詢使用notexists子句是是沒有意義義的;使用notin子子句的非關(guān)關(guān)聯(lián)子查詢詢可以轉(zhuǎn)sqlminus子句,性性能相對會會高一些;;使用notin子子句的關(guān)聯(lián)聯(lián)子查詢,,可以使用用帶有selectdistinct子句的的外部連接接操作改寫寫;各種子查詢詢技術(shù)總結(jié)結(jié)標(biāo)準(zhǔn)子查詢反連接子查詢inexistsNotinNotexists關(guān)聯(lián)子查詢多余的自動轉(zhuǎn)換為嵌套的循環(huán)連接可以重寫為selectdistinct外部連接可以重寫為selectdistinct外部連接非關(guān)聯(lián)子查詢自動轉(zhuǎn)換為嵌套的循環(huán)連接不適合可以重寫為minus操作符的嵌套循環(huán)連接不適合例子:使用用in子句句的非關(guān)聯(lián)聯(lián)子查詢可可以使用標(biāo)標(biāo)準(zhǔn)連接操操作以及使使用selectdistinct來刪除重重復(fù)的記錄錄;原sql語語句:SelectenameFromempWhereempnoin(selectempnofrombad_creditwherebad_credit_date>sysdate-365);改寫后:Selectdistinct/*+rule*/enameFromemp,bad_creditWherea.empno=b.empnoandbad_credit_date>sysdate-365;使用提示進進行調(diào)整提示簡介歷史:第一一次引入是是在oracle7,用來彌彌補CBO的缺陷,,oracle8i中工作得得較好;目的:用來來更改SQL語句的的執(zhí)行計計劃;格式:select(update,delete)/*+hints*/…或或select(update,delete)--+hint…使用提示遵遵循的原則則注意檢查語語法:select/*+hint*/…,/*和+之間不能能有空格,,必須緊跟跟在select之之后,否則則無效使用表別名名:如果指指定了表別別名,就不不能使用表表名稱;不能使用模模式名稱::如果指定定了模式所所有者,那那么提示將將被忽略;;檢驗提示::如果指定定不可用的的訪問路徑徑,如:first_rows優(yōu)化器器模式與orderby子子句不兼容容,那么提提示將被忽忽略;使提示無效效的條件Cluster,hash::與非簇表表一起使用用;Merge_aj,push_subq,Hash_aj:不存存在子查詢詢;Index:指定的的索引不存存在;Index_combine:不存在在位圖索引引;Parellel::調(diào)用的不不是全表掃掃描計劃;;Star::事實表中中存在不恰恰當(dāng)索引;;Use_concat:在where子句中不不存在多個個索引;Use_nl:表中中不存在索索引;提示之一::優(yōu)化器提提示Rule::使oracle為為查詢應(yīng)用用基于規(guī)則則的優(yōu)化模模式。在懷懷疑CBO使用了非非優(yōu)化的執(zhí)執(zhí)行計劃時時,使用rule提提示;它將將忽略表和和索引的統(tǒng)統(tǒng)計資料;;/*+rule*/All_rows::基于成本本的優(yōu)化方方法。目的的是提供最最佳的吞吐吐量和最小小的資源消消耗。傾向向于全表掃掃描,不適適用于OLTP系統(tǒng)統(tǒng);依賴于于表和索引引的統(tǒng)計資資料;/*+all_rows*/First_rows:基于于成本的優(yōu)優(yōu)化方法。。目的是提提供最快的的反映時間間。依賴于于表和索引引的統(tǒng)計資資料;/*+first_rows*/提示之二::表連接提提示Use_hash::對指定的的表執(zhí)行一一個散列連連接;如果果有一個表表較小,通通??煊谇肚短籽h(huán)連連接;在兩兩個表非常常大的情況況下,散列列連接經(jīng)常常與并行查查詢連接結(jié)結(jié)合使用;;select/*+use_hash(a,b)parallel(a,4)parallel(b,4)*/;Use_merge:強制執(zhí)執(zhí)行一個排排序合并操操作;對表表執(zhí)行全表表掃描;通通常與并行行查詢結(jié)合合使用;最最適用于生生成大型結(jié)結(jié)果集的查查詢、不使使用where子句句的大表連連接或表中中無可用索索引的查詢詢;select/*+use_merge(a,b)parallel(a,4)parallel(b,4)*/表連接提示示(續(xù))Use_nl:強制制對目標(biāo)表表執(zhí)行嵌套套循環(huán)連接接;對包含含兩個大表表的連接通通常最快;;可以不用用更改from子句句表的順序序來更改驅(qū)驅(qū)動表(使使用CBO時,from子句句的第一個個表);是是CBO的的默認(rèn)行為為,比較少少用;/*+use_nl(a)*/Star::強制使用用星型查詢詢計劃;查查詢中至少少存在三個個表(一個個事實表和和幾個維表表),而且且事實表((大表)存存在恰當(dāng)?shù)牡乃饕?i可以使使用位圖索索引);/*+star*/提示之三::反連接提提示反連接是在在SQL語語句中包含含notin或notexist子句時時執(zhí)行的操操作;如果果子查詢返返回的任何何一條記錄錄包含空值值,那么該該查詢將不不會返回記記錄;應(yīng)盡盡量避免使使用。Hash_aj,Merge_aj::在notin子子查詢的字字段中不存存在空值的的時候,根根據(jù)連接的的類型,考考慮使用這這兩個提示示之一,可可以在很大大程度上提提高notin子子查詢的性性能;/*+hash_aj*/提示之四::索引提示示Index:優(yōu)化器器將使用指指定的索引引;如果沒沒有指定索索引,優(yōu)化化器將使用用表中最佳佳的索引;;/*+index(table,index)*/Index_join:要求求優(yōu)化器使使用索引連連接作為訪訪問路徑;;And_equal:如果表表擁有非唯唯一的單獨獨字段索引引,而且期期望使用多多個索引服服務(wù)于該查查詢,那么么使用該提提示將合并并這些索引引;至少兩兩個索引名名,但不能能超過五個個;/*+and_equal(table,index1,index2,……)*/索引提示((續(xù))Index_asc:要求在在范圍掃描描中使用升升序索引;;優(yōu)化器的的默認(rèn)行為為,不常用用;No_index::強制優(yōu)化化器忽略索索引得存在在。一般用用在并行全全表掃描性性能高于索索引范圍掃掃描性能的的情況下;;等同于full提提示;Index_desc::要要求求在在范范圍圍掃掃描描中中使使用用降降序序索索引引;;如如在在max(())計計算算字字段段的的最最大大值值的的時時候候使使用用;;/*+index_desc(table,index)*/索引引提提示示((續(xù)續(xù)))Index_combine::強強制制使使用用位位圖圖索索引引作作為為表表的的訪訪問問路路徑徑,,對對兩兩個個位位圖圖索索引引執(zhí)執(zhí)行行ROWID交交集集操操作作。。如如果果沒沒有有指指定定索索引引作作參參數(shù)數(shù),,優(yōu)優(yōu)化化器器將將自自動動選選擇擇最最佳佳的的位位圖圖索索引引;;/*+table(bitmap1,bitmap2)*/Index_ffs::強強制制使使用用快快速速完完全全索索引引掃掃描描;;如如果果大大表表中中不不存存在在被被查查詢詢字字段段的的高高層層索索引引主主鍵鍵,,比比如如需需要要選選擇擇復(fù)復(fù)合合索索引引中中第第二二個個字字段段的的值值時時,,那那么么快快速速完完全全索索引引掃掃描描總總是是比比全全表表掃掃描描速速度度更更快快;;/*+index_ffs(table,comindex)*/索引引提提示示((續(xù)續(xù)))Use_concat::要要求求為為查查詢詢中中所所有有or條條件件使使用用unionall執(zhí)執(zhí)行行計計劃劃;;一一般般用用在在where子子句句中中存存在在大大量量的的or條條件件;;提示示之之五五::并并行行提提示示Parallel::要要求求表表查查詢詢以以并并行行模模式式執(zhí)執(zhí)行行;;一一般般用用在在多多個個cpu的的服服務(wù)務(wù)器器上上,,與與full提提示示一一起起使使用用;;/*+full(table)parallel(table,8)*/Noparallel::不不希希望望對對全全表表掃掃描描使使用用并并行行機機制制,,如如對對小小表表執(zhí)執(zhí)行行的的全全表表掃掃描描時時,,使使用用該該提提示示;;提示示之之六六::表表訪訪問問提提示示Full::要要求求避避開開索索引引,,調(diào)調(diào)用用全全表表掃掃描描;;讀讀取取表表中中大大量量的的數(shù)數(shù)據(jù)據(jù)塊塊時時;;與與parallel一一起起使使用用;;Hash::選選擇擇散散列列掃掃描描來來訪訪問問指指定定的的簇簇表表;;/*+hash*/Cluster::選選擇擇簇簇掃掃描描來來訪訪問問指指定定的的簇簇表表;;/*+cluster*/Nocache::指指定定為為keep池池分分配配的的表表數(shù)數(shù)據(jù)據(jù)塊塊放放置置在在default池池的的中中點點;;很很少少使使用用;;表訪訪問問提提示示((續(xù)續(xù)))Ordered::要要求求表表按按照照from子子句句指指定定的的順順序序進進行行連連接接;;對對連連接接多多于于4個個表表的的查查詢詢非非常常有有用用,,可可以以節(jié)節(jié)省省sql解解析析的的時時間間;;/*+ordered*/Ordered_predicates::用用來來指指定定where子子句句中中布布爾爾條條件件評評估估的的順順序序;;Push_subq::要要求求查查詢詢數(shù)數(shù)據(jù)據(jù)塊塊中中的的所所有有子子查查詢詢在在執(zhí)執(zhí)行行計計劃劃中中盡盡可可能能早早的的被被執(zhí)執(zhí)行行;;用用在在子子查查詢詢相相對對來來說說不不很很昂昂貴貴,,并并且且在在很很大大程程度度上上降降低低返返回回到到記記錄錄數(shù)數(shù);;如如果果子子查查詢詢使使用用的的是是排排序序合合并并連連接接或或調(diào)調(diào)用用遠遠程程表表,,提提示示將將不不起起作作用用;;調(diào)整整索索引引常見見的的索索引引類類型型普通通索索引引::最最常常見見到到的的索索引引,,createindexidx1ontable1(f1);復(fù)合合索索引引::索索引引建建立立在在多多個個字字段段上上;;createidx2ontable2(f1,f3);位圖圖索索引引::使使用用位位圖圖的的方方式式存存儲儲索索引引;;createbitmapindexidx3ontable3(f1);基于函函數(shù)的的索引引:createidx4ontable4(upper(f2));;索引無無效內(nèi)置函函數(shù)使使索引引無效效:……fromtable1awheresubstr(a.f1,2,4)……,,f1上的的索引引無效效;執(zhí)行一一個數(shù)數(shù)學(xué)函函數(shù)也也會使使索引引無效效:……fromtable1awherea.f1*3>1000,f1上的的索引引無效效;不相等等運算算符有有時也也會使使索引引無效效:……fromtable1awherea.f1<>1000,導(dǎo)導(dǎo)致致全表表掃描描,f1上上的索索引無無效;;Where子子句中中使用用復(fù)合合函數(shù)數(shù)的非非第一一字段段將無無法使使用索索引;;索引無無效((續(xù)))帶有l(wèi)ike條條件的的查詢詢:wherexxxlike‘‘%x’’;Null字字符串串與字字段相相連接接使索索引無無效;;wheref1||’’’=‘‘…’’……;索引調(diào)調(diào)整使用索索引來來消除除一些些不必必要((如表表中沒沒有索索引,,排序序合并并連接接)的的排序序操作作;通過增增加索索引來來避免免不合合法的的全表表掃描描(一一般來來說,,在有有序表表中查

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論