0

我有两个名为“节点”和“链接”的表。我正在执行以下查询,它会返回我想要的结果。这个怎么优化?我在内部查询中使用外部查询的结果集。如何在内部查询中引用外部查询的结果集,以防止再次运行相同的外部查询。箭头之间的重复查询。

SELECT * FROM nodes where name = 'Compost' union all 
-> SELECT * FROM nodes where id in
 ( SELECT target from links where source in 
    ( SELECT id FROM  (SELECT * FROM nodes where name = 'Compost' <- ) as a)) union all  SELECT * FROM nodes where id in 
        ( SELECT target from links where source in (SELECT id FROM (   -> SELECT * FROM nodes where id in ( SELECT target from links where source in 
            ( SELECT id FROM (SELECT * FROM nodes where name = 'Compost'<- ) as c))) as b))
4

1 回答 1

0

IN ( SELECT ... )表现不佳的 转为 JOIN。

SELECT  ...
    FROM  a
    WHERE  x IN (
        SELECT  x
            FROM  b
            WHERE  test_b 
                )
      AND  test_a; 

-->

SELECT  ...
    FROM  a
    JOIN  b USING(x)
    WHERE  test_a
      AND  test_b;

并看到你INDEX(x)至少有一张桌子。

于 2015-03-07T02:22:34.320 回答