採取以下兩個模擬表:有效的替代子查詢的SQL Server
dbo.animal
id name
1 dog
2 cat
dbo.animal_food
id animal_id food_id active
1 1 4 1
2 1 5 1
我需要查詢ag根據不同的排序結果,根據animal_food
的多個子查詢,執行animal
。像這樣的事情:
select name,
( select top 1 food_id
from animal_food
where animal_id = animal.id
order by food_id desc) as max_food_id,
( select top 1 food_id
from animal_food
where animal_id = animal.id
and active = 1
order by food_id desc) as max_active_food_id,
from animal
這顯然非常低效---我需要加快速度。但是,我無法弄清楚如何將此重構爲可提高性能的聯接。
有關查詢的性能問題,這是一個好主意,包括實際的執行計劃。你說*「顯然非常低效」*但查詢優化器可能會做一些*效率高(至少足夠高效)的東西。 –