簡體   English   中英

使用SELECT IN SELECT以更有效的方式進行mysql查詢

[英]mysql query with SELECT IN SELECT in more efficient way

請幫助我優化有關電影推薦(rec)的查詢。 我有很多記錄,查詢運行速度很慢。 以下查詢運行2分鍾

   SELECT rec.toMovieID, sum(rec.score) 
   FROM rec 
   WHERE movieID in 
      (SELECT movieid as movieID FROM userFavorites as ufv WHERE ufv.userid = 29)
   GROUP BY rec.toAMovieID
   ORDER BY rec.score DESC
   LIMIT 10

您認為我可以進一步優化嗎?

您可以使用內部聯接而不是子選擇

SELECT
    rec.toMovieID,
    sum(rec.score) 
FROM rec INNER JOIN userFavorites ON rec.movieID = userFavorites.movieid
WHERE
    userid = 29
GROUP BY rec.toAMovieID
ORDER BY rec.score DESC
LIMIT 10

您應該在where子句中的行上設置索引,至少要為movieid和userid設置索引。 (如果尚未完成)

您可以使用exists

   SELECT rec.toMovieID, sum(rec.score) 
   FROM rec r
   WHERE EXISTS (SELECT 1 FROM userFavorites as ufv WHERE ufv.userid = 29 and ufv.MovieId = r.MovieId)
   GROUP BY rec.toAMovieID
   ORDER BY rec.score DESC
   LIMIT 10;

你必須使用要小心join ,因為重復的記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM