專業(yè)點,那叫“條件謂詞下推”
sql優(yōu)化中join中的優(yōu)化手段:謂詞下推。
謂詞下推,就是在將過濾條件下推到離數(shù)據(jù)源更近的地方,最好就是在table_scan時就能過濾掉不需要的數(shù)據(jù),在關系代數(shù)中謂詞是可以左右上下移動的,由于join查詢的特殊性,在優(yōu)化join condition中的謂詞時,對應不同的join 內型,有不同的策略
inner join
inner join的結果集是左表和有表都要滿足條件,所以inner join condtion中的條件都是可以下推的,比如下面的查詢
select e.* from emp e inner join dept d on e.deptno = d.deptno and emp.deptno=5;
優(yōu)化后的查詢
select e. from (select * from emp where emp.deptno =5) e inner join (select * from deptno where deptno =5 ) on on e.deptno = d.deptno;
left join 由于左表是保留表,所有join condition 中的左表條件會失效,右表的條件可以下推,對right join. 則相反;
對于outter join 由于左表和右表都是保留表,則都不能下推;
對于anti join,由于查詢的結果集是不滿足join 條件的集合,如果謂詞下推,查詢結果集將會為null, 當然有一種思路可以在謂詞時下推時將條件取非,獲取正確結果;
評論
圖片
表情
