2014-11-01 93 views
1

比方說,我有以下查詢:蜂巢 - 優化自聯接

select a.model, a.engine_size, b.engine_size from (

    select model, engine_size 
    from cars 
    where number_of_doors = 4 
) a 

inner join (

    select model, engine_size 
    from cars 
    where number_of_doors = 4 
) b 

on (a.model = b.model); 

我在這裏重複的子查詢。我只是想知道以下是更'最佳'或將重複的子查詢的結果自動緩存?

with features as (

    select model, engine_size 
    from cars 
    where number_of_doors = 4 
) 

select a.model, a.engine_size, b.engine_size 
from features a 
inner join features b 
on (a.model = b.model); 

這些要麼會更高效?

謝謝!

+0

爲什麼你需要子查詢,也不能確定爲什麼你需要engine_size兩次,你可以得到相同的單查詢,從汽車其中number_of_doors = 4 – radar 2014-11-01 02:03:25

+0

這是一個例子,我拉出空氣。問題更多的是如何配置單元優化子查詢。 – bluepnume 2014-11-01 02:09:39

+0

對不起,困惑。是優化自連接還是子查詢的問題?bcz相同的子查詢重複兩次以實現自連接會導致不必要的複雜查詢。如果你可以用真實的例子來澄清這個問題,那就太好了。 – Kunal 2014-11-03 19:07:09

回答

0

一種方法是做一個自我加入,但該方案沒有任何意義

select a.model, a.engine_size,b.engine_size 
from cars a 
join cars b 
on  (a.model = b.model) 
where a.number_of_doors = 4