我有一個使用子查詢的簡單查詢:使用JOINS,而不是子查詢
SELECT pictures.*
FROM pictures
WHERE pictures.user_id IN
(SELECT follows.following_id
FROM follows
WHERE follows.follower_id = 9)
ORDER BY created_at DESC LIMIT 5;
我很納悶, 一)如何刪除子查詢和使用JOINS,而不是和b)會不會有使用JOINS而不是子查詢的性能好處?
(follows.following_id,follows.follower_id,pictures.user_id都編入索引)
感謝
爲什麼你要刪除的子選擇?使用連接的查詢返回的內容與子選擇完全不同,您需要使用例如'distinct',就像JW的答案一樣,通過子選擇將JOIN的結果減少到查詢的結果。我懷疑這會更快。 –
[子選擇明確表示您想要表達的內容](http://stackoverflow.com/a/2577188/237483)。要回答b),你必須用你的數據集來測試兩個版本。 –
@a_horse_with_no_name我從jw的答案中使用了INNER JOIN。它給我0.5 - 1毫秒的結果,而子查詢給我的結果在4.5 - 7.5毫秒之間。 – 0xSina