我在下面有以下sql查询:
select *
from a
inner join b on b.id in
(select c.id from c
where c.someid = a.someid)
or a.someid = b.id
这是按预期工作但执行时间不好(4行10秒)
我尝试了很多替代品,但结果不同。我很难做到声明。
答案 0 :(得分:2)
您的查询看起来很好。 b.id
匹配a.someid
或我们必须查找c
的{{1}}个条目。关于这一点我们无能为力,只需要在两个地方看一下就很费力。当然,所有ID都应该有索引,但建议在a.someid
上使用复合索引以便更快地查找。
除此之外,您可以尝试使用c(someid,id)
代替EXISTS
。可以预期这两者会导致大致相同的执行计划,但由于某种原因,某些DBMS处理IN
优于EXISTS
。
IN
答案 1 :(得分:1)
检查这个..
select *
from a
inner join b
on a.someid = b.id
join table
(select c.id as id from c
where c.someid = a.someid) X
on x.id = b.id
答案 2 :(得分:0)
感谢您的回答。我学到了很多。不幸的是,EXISTS
对我的案例不起作用。我使用了UNION
,结果时间是2秒。
select *
from a
inner join b on b.id in
(select c.id from c
where c.someid = a.someid)
union
select *
from a
inner join b on b.someid = a.id