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