很慢我有一個SQL查詢是這樣的:MySQL的子查詢巨大的表
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查詢是找出intermediate_id連接的特定S_ID和o_id之間,但似乎非常慢。花大約10秒。
link_table是巨大的(與40M行)
任何人都可以幫助我嗎? 謝謝。
很慢我有一個SQL查詢是這樣的:MySQL的子查詢巨大的表
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查詢是找出intermediate_id連接的特定S_ID和o_id之間,但似乎非常慢。花大約10秒。
link_table是巨大的(與40M行)
任何人都可以幫助我嗎? 謝謝。
試試這個:按我的經驗EXISTS給出了更好的性能 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)
嘗試使用自聯接:::
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
如果使用新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將顯示如果使用任何索引。
子查詢比JOIN更新 - 或者你只是在開個玩笑 – Strawberry
並且有'INDEX(o_id,s_id)'' –