我有兩個不同的查詢產生相同的結果。我想知道哪一個更有效率。第二個,我用的是選擇子句少,但是我移動,其中到outter選擇。哪一個先執行? 左加入或其中子句?通過左連接和分區使用分析
使用3 「選擇」:
select * from
(
select * from
(
select
max(t.PRICE_DATETIME) over (partition by t.PRODUCT_ID) as LATEST_SNAPSHOT,
t.*
from
PRICE_TABLE t
) a
where
a.PRICE_DATETIME = a.LATEST_SNAPSHOT;
) r
left join
PRODUCT_TABLE l on (r.PRODUCT_ID = l.PRODUCT_ID and r.PRICE_DATETIME = l.PRICE_DATETIME)
使用2種選擇:
select * from
(
select
max(t.PRICE_DATETIME) over (partition by t.PRODUCT_ID) as LATEST_SNAPSHOT,
t.*
from
PRICE_TABLE t
) r
left join
PRODUCT_TABLE l on (r.PRODUCT_ID = l.PRODUCT_ID and r.PRICE_DATETIME = l.PRICE_DATETIME)
where
r.PRICE_DATETIME = r.LATEST_SNAPSHOT;
PS:我知道,我知道, 「選擇星」 是邪惡的,但我在寫這本只有這樣才能讓它變小。
SQL Server可能會將兩者都編譯爲完全相同的查詢計劃 – Andomar 2010-10-08 21:22:55