采取以下两个模拟表:有效的替代子查询的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
这显然非常低效---我需要加快速度。但是,我无法弄清楚如何将此重构为可提高性能的联接。
有关查询的性能问题,这是一个好主意,包括实际的执行计划。你说*“显然非常低效”*但查询优化器可能会做一些*效率高(至少足够高效)的东西。 –