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ù)操作有負(fù)面影響。注意此處雖然翻譯為驅(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ù)數(shù)據(jù)的存取取方法全表掃描((FullTableScans,FTS)通過ROWID的表表存取(TableAccessbyROWID)索引引掃掃描描((IndexScan))索引引掃掃描描((IndexScan))索引引唯唯一一掃掃描描(indexuniquescan)索引引范范圍圍掃掃描描(indexrangescan)索引引全全掃掃描描(indexfullscan)索引引快快速速掃掃描描(indexfastfullscan)表訪訪問問方方式式全表表掃掃描描::讀讀取取表表中中每每一一條條記記錄錄,,順順序序讀讀取??;;散列列獲獲取?。海菏故褂糜梅柼柹⑸⒘辛兄髦麈I鍵來來為為帶帶有有匹匹配配散散列列值值表表中中的的記記錄錄創(chuàng)創(chuàng)建建ROWID;;ROWID訪訪問問::通通過過指指定定的的ROWID的的方方式式在在表表中中選選定定一一個個單單獨獨的的記記錄錄;;是是訪訪問問記記錄錄的的最最快快方方式式;;表之之間間的的連連接接rowsource(表表)之之間間的的連連接接順順序序?qū)τ谟诓椴樵冊兊牡男事视杏蟹欠浅34蟠蟮牡挠坝绊戫?。。通通過過首首先先存存取取特特定定的的表表,,即即將將該該表表作作為為驅(qū)驅(qū)動動表表,,這這樣樣可可以以先先應(yīng)應(yīng)用用某某些些限限制制條條件件,,從從而而得得到到一一個個較較小小的的rowsource,,使使連連接接的的效效率率較較高高,,這這也也就就是是我我們們常常說說的的要要先先執(zhí)執(zhí)行行限限制制條條件件的的原原因因。。一一般般是是在在將將表表讀讀入入內(nèi)內(nèi)存存時時,,應(yīng)應(yīng)用用where子子句句中中對對該該表表的的限限制制條條件件。。SQL執(zhí)執(zhí)行的的步驟驟解析::安全全性檢檢查,,語法法檢查查;創(chuàng)建::評估估多個個執(zhí)行行計劃劃,并并選擇擇一個個最優(yōu)優(yōu)的執(zhí)執(zhí)行計計劃;;執(zhí)行::捆綁綁變量量,執(zhí)執(zhí)行已已經(jīng)創(chuàng)創(chuàng)建的的執(zhí)行行計劃劃;獲?。海韩@取取結(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時間最短短,使用的資資源最小;設(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)調(diào)整整設(shè)置置CBO模模式式的的方方法法Init.ora參參數(shù)數(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)統(tǒng)計計資資料料;;使使用用analyzetable和和analyzeindex命命令令從從表表或或索索引引中中收收集集統(tǒng)統(tǒng)計計資資料料((表表的的記記錄錄平平均均長長度度,,記記錄錄數(shù)數(shù)等等));;如如果果沒沒有有現(xiàn)現(xiàn)存存的的統(tǒng)統(tǒng)計計資資料料,,將將在在sql運運行行時時收收集集資資料料,,會會大大大大降降低低性性能能;;影響響CBO執(zhí)執(zhí)行行計計劃劃成成本本評評估估的的初初始始化化參參數(shù)數(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)環(huán)連連接接((nestedloopjoin))::一一個個小小的的內(nèi)內(nèi)部部表表和和一一個個外外部部表表。。比比較較內(nèi)內(nèi)部部表表的的每每一一條條記記錄錄和和外外部部表表的的每每一一條條記記錄錄,,返返回回滿滿足足條條件件的的記記錄錄;;散列列連連接接((hashjoin))::為為較較小小的的表表在在RAM創(chuàng)創(chuàng)建建散散列列表表((可可以以用用來來從從較較大大的的那那個個表表讀讀取取記記錄錄));;排序合并連接接(sortmergejoin):使用用連接字段將將兩個記錄集集排序然后合合并;星型連接(starjoin)::幾個小型表表(將組成虛虛擬表)和一一個大型事實實表,然后進進行嵌套循環(huán)環(huán)連接;表連接接類型型等連接接:標(biāo)標(biāo)準(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)經(jīng)常調(diào)調(diào)用nestedloop連接接;表連接接類型型(續(xù)續(xù))反連接接:指指使用用包含含notin或或notexists子句句的子子查詢詢進行行的連連接;;默認(rèn)認(rèn)使用用嵌套套循環(huán)環(huán)算法法;半連接接:指指在子子查詢詢中使使用in或或exists子句句時進進行的的操作作;表連接接調(diào)整整原則則RBO只能能調(diào)用用nestedloop和和mergesort連接接;hashjoin和star連連接接只能能在CBO中得得到;;盡量不不要使使用notin反反連接接子查查詢,,把它它替換換成標(biāo)標(biāo)準(zhǔn)等等連接接,用用外連連接和和wherecolumnisnull子句句刪除除多余余的記記錄;;或者者盡量量替換換成notexists子子查詢詢,因因為它它將調(diào)調(diào)用相相關(guān)聯(lián)聯(lián)的子子查詢詢;半連接子子查詢可可以重新新書寫成成標(biāo)準(zhǔn)等等連接,,用selectdistinct子句句刪除重重復(fù)的記記錄;表連接接調(diào)整整原則則(續(xù)續(xù))如果驅(qū)驅(qū)動表表較小小,可可以完完全裝裝入hash_area_size內(nèi)內(nèi)存中中,使使用散散列連連接((hashjoin))速度度比嵌嵌套循循環(huán)連連接((nestedloop))快;;在兩個個表非非常大大的情情況下下,經(jīng)經(jīng)常使使用嵌嵌套循循環(huán)連連接((nestedloop));生成大大型結(jié)結(jié)果集集的查查詢、、不使使用where子句句的大大表連連接或或表中中無可可用索索引的的查詢詢,經(jīng)經(jīng)常使使用排排序合合并連連接((srotmerge);;對于多多個小小的維維表和和一個個大的的事實實表的的情況況下((數(shù)據(jù)據(jù)倉庫庫),,經(jīng)常常使用用星型型連接接(star);不同表表連接接方法法的相相對速速度星型連連接嵌套循循環(huán)連連接散列連連接排序合合并連連接連接速速度連接表表中記記錄的的數(shù)目目少多慢快調(diào)整整SQL子子查查詢詢子查查詢詢類類型型標(biāo)準(zhǔn)準(zhǔn)子子查查詢詢::in和和exists;;反連連接接子子查查詢詢::notin和和notexists;;關(guān)聯(lián)聯(lián)子子查查詢詢::指指在在子子查查詢詢內(nèi)內(nèi)部部引引用用外外部部數(shù)數(shù)據(jù)據(jù)表表;;……fromtable1awhere……(select……fromtable2bWherea.f1=b.f1……);;對對于于外外部部數(shù)數(shù)據(jù)據(jù)集集的的每每一一條條記記錄錄,,都都將將重重新新執(zhí)執(zhí)行行一一次次內(nèi)內(nèi)部部子子查查詢詢;;非關(guān)關(guān)聯(lián)聯(lián)子子查查詢詢::指指在在子子查查詢詢內(nèi)內(nèi)部部不不會會引引用用外外部部的的數(shù)數(shù)據(jù)據(jù)表表;;……fromtable1awhere……(select……fromtable2b……);;內(nèi)內(nèi)部部子子查查詢詢只只執(zhí)執(zhí)行行一一次次;;子查查詢詢調(diào)調(diào)整整原原則則只要要可可能能的的話話,,盡盡可可能能的的避避免免使使用用子子查查詢詢,,而而用用標(biāo)標(biāo)準(zhǔn)準(zhǔn)的的連連接接操操作作來來代代替替,,這這樣樣可可以以使使用用提提示示來來更更改改執(zhí)執(zhí)行行計計劃劃;;先考考慮慮子子查查詢詢的的合合法法性性,,再再考考慮慮進進行行改改寫寫;;使用一個個關(guān)聯(lián)子子查詢時時,in與exists子句句的子查查詢的執(zhí)執(zhí)行計劃劃基本相相同;在外部查查詢返回回相對較較少的記記錄時,,關(guān)聯(lián)子子查詢比比非關(guān)聯(lián)聯(lián)子查詢詢執(zhí)行得得更快;;子查詢調(diào)調(diào)整原則則(續(xù)))在內(nèi)部子子查詢只只有少量量的記錄錄時,非非關(guān)聯(lián)子子查詢比比關(guān)聯(lián)子子查詢執(zhí)執(zhí)行得更更快;關(guān)聯(lián)子查查詢使用用in子子句是多多余的;;而非關(guān)關(guān)聯(lián)子查查詢使用用exists子句是是不恰當(dāng)當(dāng)?shù)?。使用in子句的的非關(guān)聯(lián)聯(lián)子查詢詢可以轉(zhuǎn)轉(zhuǎn)換為標(biāo)標(biāo)準(zhǔn)連接接操作以以及使用用selectdistinct來刪除除重復(fù)的的記錄;;使用exists子句句的關(guān)聯(lián)聯(lián)子查詢詢可以轉(zhuǎn)轉(zhuǎn)換為標(biāo)標(biāo)準(zhǔn)連接接,但子子查詢最最好只能能返回一一個記錄錄;子查詢詢調(diào)整整原則則(續(xù)續(xù))非關(guān)聯(lián)聯(lián)子查查詢使使用notexists子子句是是沒有有意義義的;;使用notin子子句的的非關(guān)關(guān)聯(lián)子子查詢詢可以以轉(zhuǎn)sqlminus子句句,性性能相相對會會高一一些;;使用notin子子句的的關(guān)聯(lián)聯(lián)子查查詢,,可以以使用用帶有有selectdistinct子子句的的外部部連接接操作作改寫寫;各種子子查詢詢技術(shù)術(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)調(diào)整提示簡簡介歷史::第一一次引引入是是在oracle7,用用來彌彌補CBO的缺缺陷,,oracle8i中工工作得得較好好;目的::用來來更改改SQL語語句的的執(zhí)執(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)統(tǒng)計計資資料料;;/*+first_rows*/提示示之之二二::表表連連接接提提示示Use_hash::對對指指定定的的表表執(zhí)執(zhí)行行一一個個散散列列連連接接;;如如果果有有一一個個表表較較小小,,通通常常快快于于嵌嵌套套循循環(huán)環(huán)連連接接;;在在兩兩個個表表非非常常大大的的情情況況下下,,散散列列連連接接經(jīng)經(jīng)常常與與并并行行查查詢詢連連接接結(jié)結(jié)合合使使用用;;select/*+use_hash(a,b)parallel(a,4)parallel(b,4)*/;Use_merge:強強制執(zhí)行一個個排序合并操操作;對表執(zhí)執(zhí)行全表掃描描;通常與并并行查詢結(jié)合合使用;最適適用于生成大大型結(jié)果集的的查詢、不使使用where子句的大大表連接或表表中無可用索索引的查詢;;select/*+use_merge(a,b)parallel(a,4)parallel(b,4)*/表連接提示((續(xù))Use_nl:強制對目目標(biāo)表執(zhí)行嵌嵌套循環(huán)連接接;對包含兩兩個大表的連連接通常最快快;可以不用用更改from子句表的的順序來更改改驅(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)認(rèn)行為為,不不常用用;No_index::強制制優(yōu)化化器忽忽略索索引得得存在在。一一般用用在并并行全全表掃掃描性性能高高于索索引范范圍掃掃描性性能的的情況況下;;等同同于full提提示;;Index_desc::要求求在范范圍掃掃描中中使用用降序序索引引;如如在max())計算算字段段的最最大值值的時時候使使用;;/*+index_desc(table,index)*/索引提提示((續(xù)))Index_combine:強強制使使用位位圖索索引作作為表表的訪訪問路路徑,,對兩兩個位位圖索索引執(zhí)執(zhí)行ROWID交集集操作作。如如果沒沒有指指定索索引作作參數(shù)數(shù),優(yōu)優(yōu)化器器將自自動選選擇最最佳的的位圖圖索引引;/*+table(bitmap1,bitmap2)*/Index_ffs::強制使使用快速速完全索索引掃描描;如果果大表中中不存在在被查詢詢字段的的高層索索引主鍵鍵,比如如需要選選擇復(fù)合合索引中中第二個個字段的的值時,,那么快快速完全全索引掃掃描總是是比全表表掃描速速度更快快;/*+index_ffs(table,comindex)*/索引提示示(續(xù)))Use_concat:要求求為查詢詢中所有有or條條件使用用unionall執(zhí)行計計劃;一一般用在在where子子句中存存在大量量的or條件;;提示之五五:并行行提示Parallel:要要求表查查詢以并并行模式式執(zhí)行;;一般用用在多個個cpu的服務(wù)務(wù)器上,,與full提提示一起起使用;;/*+full(table)parallel(table,8)*/Noparallel:不希希望對全全表掃描描使用并并行機制制,如對對小表執(zhí)執(zhí)行的全全表掃描描時,使使用該提提示;提示之六六:表訪訪問提示示Full:要求求避開索索引,調(diào)調(diào)用全表表掃描;;讀取表表中大量量的數(shù)據(jù)據(jù)塊時;;與parallel一起使使用;Hash:選擇擇散列掃掃描來訪訪問指定定的簇表表;/*+hash*/Cluster:選擇擇簇掃描描來訪問問指定的的簇表;;/*+cluster*/Nocache:指定定為keep池池分配的的表數(shù)據(jù)據(jù)塊放置置在default池池的中點點;很少少使用;;表訪問提提示(續(xù)續(xù))Ordered:要求求表按照照from子句句指定的的順序進進行連接接;對連連接多于于4個表表的查詢詢非常有有用,可可以節(jié)省省sql解析的的時間;;/*+ordered*/Ordered_predicates::用來指指定where子句中中布爾條條件評估估的順序序;Push_subq::要求查查詢數(shù)據(jù)據(jù)塊中的的所有子子查詢在在執(zhí)行計計劃中盡盡可能早早的被執(zhí)執(zhí)行;用用在子查查詢相對對來說不不很昂貴貴,并且且在很大大程度上上降低返返回到記記錄數(shù);;如果子子查詢使使用的是是排序合合并連接接或調(diào)用用遠(yuǎn)程表表,提示示將不起起作用;;調(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,

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論