溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

查看執(zhí)行計(jì)劃的方法【在前人的基礎(chǔ)上學(xué)習(xí)和總結(jié)】

發(fā)布時(shí)間:2020-08-15 19:46:10 來源:ITPUB博客 閱讀:156 作者:wenhua 欄目:關(guān)系型數(shù)據(jù)庫

exp:create table t1 as select * from dba_objects;

       create table t2 as select * from dba_objects;

通常,在開發(fā)環(huán)境中,研究所"譜寫"的sql的執(zhí)行計(jì)劃,還是很有必要的。

個(gè)人在學(xué)習(xí)和總結(jié)過程中,分析了下面這幾種查看預(yù)估和實(shí)際執(zhí)行計(jì)劃的方法,并總結(jié)了下。

通常,我們在PL/SQL developer 中,運(yùn)行oracle自帶的執(zhí)行計(jì)劃查看方法就可以了[方法3]。

在命令行sqlplus 中,運(yùn)用[方法1]就可以。

其他方法,可作為參考,理解語法即可。

        -----------------------------------------

方法1:sqlplus中

set autotrace on
select * from t1 where t1.object_id <=1000;
可以查看結(jié)果和執(zhí)行計(jì)劃以及統(tǒng)計(jì)信息;[若是sql改寫的足夠簡單,可嘗試用這種方法執(zhí)行;比如查詢內(nèi)容換成count(1)]
set autotrace traceonly
select * from t1 where t1.object_id <=1000;

可以查看執(zhí)行計(jì)劃以及統(tǒng)計(jì)信息,且不執(zhí)行sql;

-----------------------------------------

方法2:sql window 中
explain plan for
select * from t1 where t1.object_id <=1000;
select * from plan_table; --查看的不是太清晰,理解即可
select * from table(dbms_xplan.display);

        這種方法可以查看執(zhí)行計(jì)劃以及統(tǒng)計(jì)信息,且不執(zhí)行sql;

        -----------------------------------------

方法3:快捷鍵(可以通過sql/plus dev默認(rèn)的快捷鍵F5)
設(shè)置執(zhí)行計(jì)劃的快捷鍵的方法:

tools >>Preferences>>key Configuration >>File /New /Explain Plan Window exp: ctrl + 3 ||默認(rèn)的  F5[使用習(xí)慣看個(gè)人,我習(xí)慣使用第一種快捷方法]

-----------------------------------------

方法4:通過數(shù)據(jù)字典v$sql和v$sql_plan查看
SELECT * from t1,t2 WHERE t1.object_id=t2.object_id;
select sql_text,sql_id,hash_value,child_number from v$sql where sql_text like '%SELECT * from t1,t2%';
select * from table(dbms_xplan.display_cursor('2rqyd7uh0g6pc/2684852908',child_cursor_number,'advanced'));
--當(dāng)上面這種無法查出的時(shí)候,說明display_cursor沒有收錄,需要下面的方法查詢

SELECT * from v$sql_plan WHERE sql_id = '2rqyd7uh0g6pc';

-----------------------------------------

方法5:通過dbms_xplan.display_awr查看
#VERSION_COUNT代表有幾種不同的執(zhí)行計(jì)劃
SELECT * from t1,t2 WHERE t1.object_id=t2.object_id; select sql_text,sql_id,hash_value,child_number from v$sql where sql_text like '%select * from emp%'; #查看指定SQL的所有歷史執(zhí)行計(jì)劃,前提是該SQL的執(zhí)行計(jì)劃被采集到AWR Repository中 select * from table(dbms_xplan.display_awr('sql_id'));

select * from table(dbms_xplan.display_awr('2rqyd7uh0g6pc'));

-----------------------------------------


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI