




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quá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’。如當一個DDL語句發(fā)出后,ORACLE總是隱含的發(fā)出一些recursiveSQL語句,來修改數(shù)據(jù)字典信息,以便用戶可以成功的執(zhí)行該DDL語句。當需要的數(shù)據(jù)字典信息沒有在共享內(nèi)存中時,經(jīng)常會發(fā)生Recursivecalls,這些Recursivecalls會將數(shù)據(jù)字典信息從硬盤讀入內(nèi)存中。用戶不比關(guān)心這些recursiveSQL語句的執(zhí)行情況,在需要的時候,ORACLE會自動的在內(nèi)部執(zhí)行這些語句。當然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)當為大表(實際上應(yīng)該為返回較大rowsource的表)且相應(yīng)的列上應(yīng)該有索引。第八頁,共七十二頁。組合索引(concatenatedindex)由多個列構(gòu)成的索引,如createindexidx_emponemp(col1,col2,col3,……),則我們稱idx_emp索引為組合索引。在組合索引中有一個重要的概念:引導(dǎo)列(leadingcolumn),在上面的例子中,col1列為引導(dǎo)列。當我們進行查詢時可以使用”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)第十二頁,共七十二頁。表訪問方式全表掃描:讀取表中每一條記錄,順序讀??;散列獲取:使用符號散列主鍵來為帶有匹配散列值表中的記錄創(chuàng)建ROWID;ROWID訪問:通過指定的ROWID的方式在表中選定一個單獨的記錄;是訪問記錄的最快方式;第十三頁,共七十二頁。表之間的連接
rowsource(表)之間的連接順序?qū)τ诓樵兊男视蟹浅4蟮挠绊?。通過首先存取特定的表,即將該表作為驅(qū)動表,這樣可以先應(yīng)用某些限制條件,從而得到一個較小的rowsource,使連接的效率較高,這也就是我們常說的要先執(zhí)行限制條件的原因。一般是在將表讀入內(nèi)存時,應(yīng)用where子句中對該表的限制條件。第十四頁,共七十二頁。SQL執(zhí)行的步驟解析:安全性檢查,語法檢查;創(chuàng)建:評估多個執(zhí)行計劃,并選擇一個最優(yōu)的執(zhí)行計劃;執(zhí)行:捆綁變量,執(zhí)行已經(jī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)建執(zhí)行計劃的工具。目的:生成最快的,消耗資源最少的執(zhí)行計劃。兩種優(yōu)化器:基于規(guī)則的優(yōu)化器(RBO),基于成本的優(yōu)化器(CBO)。第十八頁,共七十二頁。優(yōu)化器模式Rule模式:完全基于數(shù)據(jù)字典生成執(zhí)行計劃;最古老、比較穩(wěn)定;Choose模式:默認的優(yōu)化器模式。根據(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ù)是否存在表或索引的統(tǒng)計資料來決定選擇RBO或CBO;第二十頁,共七十二頁。第二部分SQL調(diào)整第二十一頁,共七十二頁。SQL調(dià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提示;第二十三頁,共七十二頁?;赗BO調(diào)整第二十四頁,共七十二頁。設(shè)置RBO模式的方法Init.ora參數(shù)optimizer_mode=rule/choose;在會話層使用altersessionsetoptimizer_goal=rule/choose;在SQL中添加提示/*+rule*/設(shè)置choose模式時候,將根據(jù)是否存在表或索引的統(tǒng)計資料來決定選擇RBO或CBO;第二十五頁,共七十二頁。RBO特性總是使用索引(不識別位圖索引或基于函數(shù)的索引)總是從驅(qū)動表開始只有在不可避免的情況下,才使用全表掃描索引選擇的隨機特性第二十六頁,共七十二頁?;赗BO的調(diào)整原則驅(qū)動表的設(shè)置:在RBO中,驅(qū)動表是from子句的最后一個表;驅(qū)動表應(yīng)該是返回記錄最少的那個表;Where子句設(shè)置:限制性最強的布爾表達式放在最底層;添加基于成本的提示,來獲得更快的執(zhí)行計劃;第二十七頁,共七十二頁?;贑BO調(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ù)是否存在表或索引的統(tǒng)計資料來決定選擇RBO或CBO;第二十九頁,共七十二頁。CBO特性前提條件:存在表和索引的統(tǒng)計資料;使用analyzetable和analyzeindex命令從表或索引中收集統(tǒng)計資料(表的記錄平均長度,記錄數(shù)等);如果沒有現(xiàn)存的統(tǒng)計資料,將在sql運行時收集資料,會大大降低性能;影響CBO執(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)建散列表(可以用來從較大的那個表讀取記錄);排序合并連接(sortmergejoin):使用連接字段將兩個記錄集排序然后合并;星型連接(starjoin):幾個小型表(將組成虛擬表)和一個大型事實表,然后進行嵌套循環(huá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子句的子查詢進行的連接;默認使用嵌套循環(huán)算法;半連接:指在子查詢中使用in或exists子句時進行的操作;第三十四頁,共七十二頁。表連接調(diào)整原則RBO只能調(diào)用nestedloop和mergesort連接;hashjoin和star連接只能在CBO中得到;盡量不要使用notin反連接子查詢,把它替換成標準等連接,用外連接和wherecolumnisnull子句刪除多余的記錄;或者盡量替換成notexists子查詢,因為它將調(diào)用相關(guān)聯(lián)的子查詢;半連接子查詢可以重新書寫成標準等連接,用selectdistinct子句刪除重復(fù)的記錄;第三十五頁,共七十二頁。表連接調(diào)整原則(續(xù))如果驅(qū)動表較小,可以完全裝入hash_area_size內(nèi)存中,使用散列連接(hashjoin)速度比嵌套循環(huán)連接(nestedloop)快;在兩個表非常大的情況下,經(jīng)常使用嵌套循環(huán)連接(nestedloop);生成大型結(jié)果集的查詢、不使用where子句的大表連接或表中無可用索引的查詢,經(jīng)常使用排序合并連接(srotmerge);對于多個小的維表和一個大的事實表的情況下(數(shù)據(jù)倉庫),經(jīng)常使用星型連接(star);第三十六頁,共七十二頁。不同表連接方法的相對速度星型連接嵌套循環(huán)連接散列連接排序合并連接連接速度連接表中記錄的數(shù)目少多慢快第三十七頁,共七十二頁。調(diào)整SQL子查詢第三十八頁,共七十二頁。子查詢類型標準子查詢:in和exists;反連接子查詢:notin和notexists;關(guān)聯(lián)子查詢:指在子查詢內(nèi)部引用外部數(shù)據(jù)表;…fromtable1awhere…(select…fromtable2bWherea.f1=b.f1…);對于外部數(shù)據(jù)集的每一條記錄,都將重新執(zhí)行一次內(nèi)部子查詢;非關(guān)聯(lián)子查詢:指在子查詢內(nèi)部不會引用外部的數(shù)據(jù)表;…fromtable1awhere…(select…fromtable2b…);內(nèi)部子查詢只執(zhí)行一次;第三十九頁,共七十二頁。子查詢調(diào)整原則只要可能的話,盡可能的避免使用子查詢,而用標準的連接操作來代替,這樣可以使用提示來更改執(zhí)行計劃;先考慮子查詢的合法性,再考慮進行改寫;使用一個關(guān)聯(lián)子查詢時,in與exists子句的子查詢的執(zhí)行計劃基本相同;在外部查詢返回相對較少的記錄時,關(guān)聯(lián)子查詢比非關(guān)聯(lián)子查詢執(zhí)行得更快;第四十頁,共七十二頁。子查詢調(diào)整原則(續(xù))在內(nèi)部子查詢只有少量的記錄時,非關(guān)聯(lián)子查詢比關(guān)聯(lián)子查詢執(zhí)行得更快;關(guān)聯(lián)子查詢使用in子句是多余的;而非關(guān)聯(lián)子查詢使用exists子句是不恰當?shù)?。使用in子句的非關(guān)聯(lián)子查詢可以轉(zhuǎn)換為標準連接操作以及使用selectdistinct來刪除重復(fù)的記錄;使用exists子句的關(guān)聯(lián)子查詢可以轉(zhuǎn)換為標準連接,但子查詢最好只能返回一個記錄;第四十一頁,共七十二頁。子查詢調(diào)整原則(續(xù))非關(guān)聯(lián)子查詢使用notexists子句是沒有意義的;使用notin子句的非關(guān)聯(lián)子查詢可以轉(zhuǎn)sqlminus子句,性能相對會高一些;使用notin子句的關(guān)聯(lián)子查詢,可以使用帶有selectdistinct子句的外部連接操作改寫;第四十二頁,共七十二頁。各種子查詢技術(shù)總結(jié)標準子查詢反連接子查詢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)子查詢可以使用標準連接操作以及使用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:事實表中存在不恰當索引;Use_concat:在where子句中不存在多個索引;Use_nl:表中不存在索引;第四十八頁,共七十二頁。提示之一:優(yōu)化器提示Rule:使oracle為查詢應(yīng)用基于規(guī)則的優(yōu)化模式。在懷疑CBO使用了非優(yōu)化的執(zhí)行計劃時,使用rule提示;它將忽略表和索引的統(tǒng)計資料;/*+rule*/All_rows:基于成本的優(yōu)化方法。目的是提供最佳的吞吐量和最小的資源消耗。傾向于全表掃描,不適用于OLTP系統(tǒng);依賴于表和索引的統(tǒng)計資料;/*+all_rows*/First_rows:基于成本的優(yōu)化方法。目的是提供最快的反映時間。依賴于表和索引的統(tǒng)計資料;/*+first_rows*/第四十九頁,共七十二頁。提示之二:表連接提示Use_hash:對指定的表執(zhí)行一個散列連接;如果有一個表較小,通??煊谇短籽h(huán)連接;在兩個表非常大的情況下,散列連接經(jīng)常與并行查詢連接結(jié)合使用;select/*+use_hash(a,b)parallel(a,4)parallel(b,4)*/;Use_merge:強制執(zhí)行一個排序合并操作;對表執(zhí)行全表掃描;通常與并行查詢結(jié)合使用;最適用于生成大型結(jié)果集的查詢、不使用where子句的大表連接或表中無可用索引的查詢;select/*+use_merge(a,b)parallel(a,4)parallel(b,4)*/第五十頁,共七十二頁。表連接提示(續(xù))Use_nl:強制對目標表執(zhí)行嵌套循環(huán)連接;對包含兩個大表的連接通常最快;可以不用更改from子句表的順序來更改驅(qū)動表(使用CBO時,from子句的第一個表);是CBO的默認行為,比較少用;/*+use_nl(a)*/Star:強制使用星型查詢計劃;查詢中至少存在三個表(一個事實表和幾個維表),而且事實表(大表)存在恰當?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)化器的默認行為,不常用;No_index:強制優(yōu)化器忽略索引得存在。一般用在并行全表掃描性能高于索引范圍掃描性能的情況下;等同于full提示;Index_desc:要求在范圍掃描中使用降序索引;如在max()計算字段的最大值的時候使用;/*+index_desc(table,index)*/第五十四頁,共七十二頁。索引提示(續(xù))Index_combine:強制使用位圖索引作為表的訪問路徑,對兩個位圖索引執(zhí)行ROWID交集操作。如果沒有指定索引作參數(shù),優(yōu)化器將自動選擇最佳的位圖索引;/*+table(bitmap1,bitmap2)*/Index_ffs:強制使用快速完全索引掃描;如果大表中不存在被查詢字段的高層索引主鍵,比如需要選擇復(fù)合索引中第二個字段的值時,那么快速完全索引掃描總是比全表掃描速度更快;/*+index_ffs(table,comindex)*/第五十五頁,共七十二頁。索引提示(續(xù))Use_concat:要求為查詢中所有or條件使用unionall執(zhí)行計劃;一般用在where子句中存在大量的or條件;第五十六頁,共七十二頁。提示之五:并行提示Parallel:要求表查詢以并行模式執(zhí)行;一般用在多個cpu的服務(wù)器上,與full提示一起使用;/*+full(table)parallel(table,8)*/Noparallel:不希望對全表掃描使用并行機制,如對小表執(zhí)行的全表掃描時,使用該提示;第五十七頁,共七十二頁。提示之六:表訪問提示Full:要求避開索引,調(diào)用全表掃描;讀取表中大量的數(shù)據(jù)塊時;與parallel一起使用;Hash:選擇散列掃描來訪問指定的簇表;/*+hash*/Cluster:選擇簇掃描來訪問指定的簇表;/*+cluster*/Nocache:指定為keep池分配的表數(shù)據(jù)塊放置在default池的中點;很少使用;第五十八頁,共七十二頁。表訪問提示(續(xù))Ordered:要求表按照from子句指定的順序進行連接;對連接多于4個表的查詢非常有用,可以節(jié)省sql解析的時間;/*+ordered*/Ordered_predicates:用來指定where子句中布爾條件評估的順序;Push_subq:要求查詢數(shù)據(jù)塊中的所有子查詢在執(zhí)行計劃中盡可能早的被執(zhí)行;用在子查詢相對來說不很昂貴,并且在很大程度上降低返回到記錄數(shù);如果子查詢使用的是排序合并連接或調(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ù)學(xué)函數(shù)也會使索引無效:…fromtable1awherea.f1*3>1000,f1上的索引無效;不相等運算符有時也會使索引無效:…fromtable1awherea.f1<>1000,導(dǎo)致全表掃描,f1上的索引無效;Where子句中使用復(fù)合函數(shù)的非第一字段將無法使用索引;第六十二頁,共七十二頁。索引無效(續(xù))帶有l(wèi)ike條件的查詢:wherexxxlike‘%x’;Null字符串與字段相連接使索引無效;wheref1||’’=‘…’…;第六十三頁,共七十二頁。索引調(diào)整使用索引來消除一些不必要(如表中沒有索引,排序合并連接)的排序操作;通過增加索引來避免不合法的全表掃描(一般來說,在有序表中查詢返回的記錄數(shù)少于表記錄數(shù)的40%,或者在無序表中返回的記錄數(shù)少于表中記錄數(shù)的7%);對于數(shù)據(jù)列的唯一值較少的字段,建立位圖索引,以提高性能;創(chuàng)建基于函數(shù)的索引來避免全表掃描;第六十四頁,共七十二頁。索引調(diào)整(續(xù))當數(shù)據(jù)列中數(shù)據(jù)值不均勻時,建立字段矩形圖,以幫助系統(tǒng)選擇恰當?shù)卦L問方式來提高性能;使用快速完全索引掃描來代替訪問表的記錄;/*+index_ffs*/第六十五頁,共七十二頁。第三部分工具介紹第六十六頁,共七十二頁。一、Explainplan說明:用以查看SQL語句的執(zhí)行計劃;準備:運行$ORACLE_HOME/rdbms/admin目錄下的utlxplan.sql腳本,建立plan_table表;裝入語句,
溫馨提示
- 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 地埂黃花施工方案
- 吉林大型溫室工程施工方案
- 疫情期間保障工程施工方案
- 云南石雕八角亭施工方案
- 甘肅移動式u型渠施工方案
- 都勻換熱器機組施工方案
- 鶴壁硅pu籃球場施工方案
- 同花順:2024年年度財務(wù)報告
- 2025年銅及銅合金材合作協(xié)議書
- 通風(fēng)管道改造施工方案
- 機械設(shè)計基礎(chǔ) 課件全套 胡孟謙 01機械設(shè)計概論 -14機械創(chuàng)新設(shè)計
- 部編版語文小學(xué)二年級下冊第一單元集體備課(教材解讀)
- 小學(xué)六年級數(shù)學(xué)行程應(yīng)用題100道及答案解析
- 道路工程交通安全設(shè)施施工方案及保障措施
- 薄膜太陽能電池及制造工藝課件
- 基于Python的瓜子二手車網(wǎng)數(shù)據(jù)采集與分析
- 2024年江蘇護理職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫附答案
- 砌磚看臺施工方案
- 2020年同等學(xué)力申碩《計算機科學(xué)與技術(shù)學(xué)科綜合水平考試》歷年真題及答案
- 2024國際壓瘡護理指南
- 電廠應(yīng)急救援培訓(xùn)
評論
0/150
提交評論