資源描述:
《oracle獲取執(zhí)行計(jì)劃》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、為了適應(yīng)公司新戰(zhàn)略的發(fā)展,保障停車(chē)場(chǎng)安保新項(xiàng)目的正常、順利開(kāi)展,特制定安保從業(yè)人員的業(yè)務(wù)技能及個(gè)人素質(zhì)的培訓(xùn)計(jì)劃oracle獲取執(zhí)行計(jì)劃 Oracle的執(zhí)行計(jì)劃查看方法 Oracle在執(zhí)行一個(gè)SQL之前,首先需要看一下SQL的執(zhí)行計(jì)劃,然后在按照?qǐng)?zhí)行計(jì)劃執(zhí)行SQL,分析執(zhí)行計(jì)劃的工作是由優(yōu)化器來(lái)執(zhí)行的,在不同的條件下,一個(gè)SQL可能存在多條執(zhí)行計(jì)劃,但是在某個(gè)特定的時(shí)間點(diǎn),特定的環(huán)境下,一定只有一種執(zhí)行計(jì)劃是最優(yōu)的?! ?、Oracle的優(yōu)化方式 Oracle有兩種優(yōu)化方式:RBO(Rule-BasedOpt
2、imization)和CBO(Cost-BasedOptimization) RBO:優(yōu)化器在分析SQL語(yǔ)句的時(shí)候所遵循的優(yōu)化規(guī)則是基于Oracle內(nèi)部預(yù)定的一些規(guī)則?! BO:優(yōu)化器字分析SQL語(yǔ)句的時(shí)候主要是看語(yǔ)句執(zhí)行的開(kāi)銷(xiāo)(Cost),這里的代價(jià)主要指CPU和內(nèi)存,優(yōu)化器在判斷是否使用這種方式的時(shí)候,主要參照的是表及索引的統(tǒng)計(jì)信息。統(tǒng)計(jì)信息給出表的大小,有多少行,每行的長(zhǎng)度等信息。 2、優(yōu)化器的優(yōu)化模式 優(yōu)化模式包括:Rule,Choose,FirstRows,AllRows四種模式?! ule:走
3、基于規(guī)則的模式。目的-通過(guò)該培訓(xùn)員工可對(duì)保安行業(yè)有初步了解,并感受到安保行業(yè)的發(fā)展的巨大潛力,可提升其的專(zhuān)業(yè)水平,并確保其在這個(gè)行業(yè)的安全感。為了適應(yīng)公司新戰(zhàn)略的發(fā)展,保障停車(chē)場(chǎng)安保新項(xiàng)目的正常、順利開(kāi)展,特制定安保從業(yè)人員的業(yè)務(wù)技能及個(gè)人素質(zhì)的培訓(xùn)計(jì)劃 Choose:默認(rèn)情況下Oracle使用這種優(yōu)化模式,當(dāng)一個(gè)表或索引有統(tǒng)計(jì)信息的時(shí)候,走CBO的方式;如果表或索引沒(méi)有統(tǒng)計(jì)信息,表又不是特別的小,且相應(yīng)的字段有索引,則走RBO的方式。在缺省情況下,ORACLE采取Choose的優(yōu)化模式,為了避免不必要的Full
4、TableScan,盡量避免采取此種優(yōu)化模式,而直接采取CBO或者RBO的優(yōu)化模式?! irstRows:它與Choose方式是類(lèi)似的,所不同的是當(dāng)一個(gè)表有統(tǒng)計(jì)信息時(shí),它將是以最快的方式返回查詢(xún)的最先的幾行,從總體上減少了響應(yīng)時(shí)間。 AllRows:也就是我們所說(shuō)的Cost的方式,當(dāng)一個(gè)表有統(tǒng)計(jì)信息時(shí),它將以最快的方式返回表的所有的行,從總體上提高查詢(xún)的吞吐量。沒(méi)有統(tǒng)計(jì)信息則走基于規(guī)則的方式?! ⌒枰⒁獾氖牵篎irstRows和AllRows是有沖突的?! ?、使用pl/sql查看執(zhí)行計(jì)劃 下面以MERP系
5、統(tǒng)中的調(diào)度計(jì)劃日志表為例來(lái)說(shuō)明如何使用pl/sql查看oracle的執(zhí)行計(jì)劃。 1、啟動(dòng)pl/sql,打開(kāi)相應(yīng)的數(shù)據(jù)庫(kù)表,如圖1所示,表中總共有67704條數(shù)據(jù): 圖1打開(kāi)調(diào)度計(jì)劃日制表 這個(gè)表里面有一個(gè)字段叫做Input_time,存儲(chǔ)的是調(diào)度計(jì)劃日志被寫(xiě)入數(shù)據(jù)庫(kù)表中的時(shí)間,默認(rèn)情況下這個(gè)字段沒(méi)有建立索引,因此建立如下SQL語(yǔ)句: select*fromtb_merp_schedul_logt目的-通過(guò)該培訓(xùn)員工可對(duì)保安行業(yè)有初步了解,并感受到安保行業(yè)的發(fā)展的巨大潛力,可提升其的專(zhuān)業(yè)水平,并確保其在這個(gè)行
6、業(yè)的安全感。為了適應(yīng)公司新戰(zhàn)略的發(fā)展,保障停車(chē)場(chǎng)安保新項(xiàng)目的正常、順利開(kāi)展,特制定安保從業(yè)人員的業(yè)務(wù)技能及個(gè)人素質(zhì)的培訓(xùn)計(jì)劃 where_time、與null值比較這幾種情況使用不上索引; 2、like通配符只是出現(xiàn)在后面能夠用上索引(like‘luo%’),通配符出現(xiàn)在前面用不上索引(like‘%jun’); 3、索引列的選擇性不高的時(shí)候也用不上索引,例如一個(gè)表有個(gè)字段只有四種可能的值,數(shù)據(jù)表中有100萬(wàn)條記錄,如果在這個(gè)只有四種可能的值的字段上面建立索引也不會(huì)使用到?! ?、索引列是否是函數(shù)的參數(shù),如果是
7、,則使用不上,對(duì)于上面的sq如果寫(xiě)成下面的形式則也使用不上索引: select*fromtb_merp_schedul_logt whereto_char(_time,'yyyy-mm-ddhh24:mi:ss')EXPLAINPLANFOR SELECT*FROM;--要解析的SQL腳本 SQL>SELECT*FROMTABLE(DBMS_); 3:在SQL*PLUS下(有些命令在PL/SQL下無(wú)效)執(zhí)行如下命令:復(fù)制代碼代碼如下 : SQL>SETTIMINGON--控制顯示執(zhí)行時(shí)間統(tǒng)計(jì)數(shù)據(jù) S
8、QL>SETAUTOTRACEONEXPLAIN--這樣設(shè)置包含執(zhí)行計(jì)劃、腳本數(shù)據(jù)輸出,沒(méi)有統(tǒng)計(jì)信息 SQL>執(zhí)行需要查看執(zhí)行計(jì)劃的SQL語(yǔ)句目的-通過(guò)該培訓(xùn)員工可對(duì)保安行業(yè)有初步了解,并感受到安保行業(yè)的發(fā)展的巨大潛力,可提升其的專(zhuān)業(yè)水平,并確保其在這個(gè)行業(yè)的安全感。為了適應(yīng)公司新戰(zhàn)略的發(fā)展,保障停車(chē)場(chǎng)安保新項(xiàng)目的正常、順利開(kāi)展,特制定安保從業(yè)人員的業(yè)務(wù)技