MySQL子查询在巨大的表中非常慢

时间:2017-06-16 04:27:42

标签: mysql query-optimization

我有一个像这样的SQL查询:

SELECT o_id, someColumn... FROM link_table WHERE s_id = 1 and o_id IN
(SELECT s_id FROM link_table WHERE o_id=2)

这个sql查询是找出在特定的s_id和o_id之间连接的intermediate_id,但看起来非常慢。大约需要10秒。

link_table很大(有40M行)

任何人都可以帮助我吗? 感谢。

3 个答案:

答案 0 :(得分:0)

试试这个:根据我的经验 EXISTS 提供比 IN Cluase

更好的性能
SELECT o_id, someColumn... 
FROM link_table t1 
WHERE s_id = 1 and EXISTS (SELECT 1 
                           FROM link_table t2 
                           WHERE t2.s_id=t1.o_id AND t2.o_id=2)

答案 1 :(得分:0)

尝试使用自联接:::

SELECT o_id, someColumn... FROM 
link_table A, link_table b
WHERE a.s_id = 1 AND
a.o_id=b.s_id AND
b.o_id=2

答案 2 :(得分:0)

如果您使用新的JOIN功能,这将比原始查询执行得更好并且更具可读性

SELECT l1.o_id, someColumn... 
    FROM link_table l1
    JOIN link_table l2 on l1.o_id = l2.s_id
    WHERE l1.s_id = 1 
          and l2.o_id = 2

确保您拥有索引并使用EXPLAIN将显示使用的索引。