標(biāo)量子查詢優(yōu)化外連接
來源:懂視網(wǎng)
責(zé)編:小采
時(shí)間:2020-11-09 14:44:26
標(biāo)量子查詢優(yōu)化外連接
標(biāo)量子查詢優(yōu)化外連接:同事發(fā)來2個(gè)語句,說語句1跑得慢,語句2很快就出結(jié)果。一執(zhí)行,果然很慢。仔細(xì)發(fā)現(xiàn),2個(gè)語句不等價(jià)。 語句1: select l.*,o.object_name from v$locked_object l left join all_objects o on l.object_id=o.object_id;語句
導(dǎo)讀標(biāo)量子查詢優(yōu)化外連接:同事發(fā)來2個(gè)語句,說語句1跑得慢,語句2很快就出結(jié)果。一執(zhí)行,果然很慢。仔細(xì)發(fā)現(xiàn),2個(gè)語句不等價(jià)。 語句1: select l.*,o.object_name from v$locked_object l left join all_objects o on l.object_id=o.object_id;語句

同事發(fā)來2個(gè)語句,說語句1跑得慢,語句2很快就出結(jié)果。一執(zhí)行,果然很慢。仔細(xì)發(fā)現(xiàn),2個(gè)語句不等價(jià)。 語句1: select l.*,o.object_name from v$locked_object l left join all_objects o on l.object_id=o.object_id;語句2: select l.*,o.object_name from
同事發(fā)來2個(gè)語句,說語句1跑得慢,語句2很快就出結(jié)果。一執(zhí)行,果然很慢。仔細(xì)發(fā)現(xiàn),2個(gè)語句不等價(jià)。
語句1:
select l.*,o.object_name
from v$locked_object l left join all_objects o on l.object_id=o.object_id;
語句2:
select l.*,o.object_name
from v$locked_object l,all_objects o where l.object_id=o.object_id;
左外連接,少了一個(gè)加號(hào),改一改語句2,使它等價(jià)為語句1.
語句3:
select l.*,o.object_name
from v$locked_object l,all_objects o where l.object_id=o.object_id(+);
改成等價(jià)后也非常慢。
雖然語句2不等價(jià),為什么語句2要比1和3快?看了一會(huì)執(zhí)行計(jì)劃,明白了。語句1中OBJ$走的是全表,語句2中OBJ$走的是索引。
性能瓶頸主要是all_objects非常慢,count一下花了超過15分鐘,有100w以上的數(shù)據(jù)。
最終返回?cái)?shù)據(jù)量才80條。
標(biāo)量子查詢的優(yōu)化方法有哪些?
一種是建立索引優(yōu)化,一種是外連接。
那么是不是標(biāo)量子查詢?nèi)魏螘r(shí)候性能都要比外連接差呢,不一定。
下面改成標(biāo)量子查詢的語句
語句4:
select l.*,(select o.object_name from all_objects o where l.object_id=o.object_id) from v$locked_object l;
現(xiàn)在這種情況本身有索引了,可以改寫成標(biāo)量子查詢,也是非常快。
避免了OBJ$的全表,all_objects有100w多記錄
改寫后等價(jià)于原來左外連接的意思,速度杠杠的,2s內(nèi)出結(jié)果。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
標(biāo)量子查詢優(yōu)化外連接
標(biāo)量子查詢優(yōu)化外連接:同事發(fā)來2個(gè)語句,說語句1跑得慢,語句2很快就出結(jié)果。一執(zhí)行,果然很慢。仔細(xì)發(fā)現(xiàn),2個(gè)語句不等價(jià)。 語句1: select l.*,o.object_name from v$locked_object l left join all_objects o on l.object_id=o.object_id;語句