【发布时间】:2023-03-12 02:38:01
【问题描述】:
这是我当前的查询:
select i.id, i.alder, i.kon, i.artal, i.vecka, s.fraga, s.varumarke,
part1.JokerinText, part2.LotonText, part3.VikingText,
part4.VedonlyönninText, part5.KenonText
from intervjuperson i
inner join svar s on s.intervjuperson = i.id
left join (select s2.text as LotonText, s2.intervjuperson
from svar s2 where s2.fraga = 97607) as part2 on part2.intervjuperson = i.id
left join (select s2.text as VikingText, s2.intervjuperson
from svar s2 where s2.fraga = 97608) as part3 on part3.intervjuperson = i.id
left join (select s2.text as jokerinText, s2.intervjuperson
from svar s2 where s2.fraga = 97609) as part1 on part1.intervjuperson = i.id
left join (select s2.text as VedonlyönninText, s2.intervjuperson
from svar s2 where s2.fraga = 97610) as part4 on part4.intervjuperson = i.id
left join (select s2.text as KenonText, s2.intervjuperson
from svar s2 where s2.fraga = 97611) as part5 on part5.intervjuperson = i.id
where s.fraga in (97606) and i.artal > 2010
如何优化此查询,使其只需要几秒钟,而目前需要 2 分钟?
【问题讨论】:
-
这是 MySql 还是 SQL Server?
-
能否格式化您的代码?另外,您定义的索引是什么?你检查瓶颈的执行计划了吗?
-
尝试删除子选择 - 您可以添加子选择
s where clauses to the LEFT JOINs 子句。这可能会有所帮助,这取决于您拥有哪些索引以及表的大小以及优化器将如何处理。 -
如果您愿意,请考虑遵循以下简单的两步操作: 1. 如果您还没有这样做,请提供适当的 DDL(和/或 sqlfiddle),以便我们可以更轻松地复制问题。 2. 如果您尚未这样做,请提供与步骤 1 中提供的信息相对应的所需结果集。
标签: mysql sql sql-server sql-server-2008 join