我有一个像这样的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行)
任何人都可以帮助我吗? 感谢。
答案 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将显示使用的索引。