2013-10-04 5 views
0

어떻게이 쿼리를 최적화 할 수 있습니까? 10 행을 얻는 데 2 ​​~ 3 초가 걸립니다. 이 도움이MySQL 쿼리 최적화 - 하위 쿼리 + 다중 조인

SELECT users.user_id, users.user_name, users.user_display_name, 
(SELECT COUNT(tweet_id) FROM tweets WHERE tweet_user_id = users.user_id AND tweet_status = 1) AS user_tweets_count, 
(SELECT COUNT(tweet_reply_id) FROM tweets_reply tr JOIN tweets t ON t.tweet_id = tr.tweet_reply_tweet_id WHERE tweet_reply_user_id = users.user_id AND t.tweet_status = 1 AND tr.tweet_reply_status = 1) AS user_replies_count 
FROM users 
JOIN tweets ON tweets.tweet_user_id = users.user_id 
JOIN tweets_reply ON tweets_reply.tweet_reply_user_id = users.user_id 
WHERE (tweets_reply.tweet_reply_status = 1 AND tweets.tweet_status = 1) 
GROUP BY users.user_id 
ORDER BY (user_tweets_count + user_replies_count) DESC 
LIMIT 10 
+0

하위 목록이 필요하지 않으며 필드 목록 (이미 사용자가 테이블에 가입)에서 count (tweet_id), count (tweet_reply_id) 만 필요합니다. – ahmad

답변

0
SELECT users.user_id, users.user_name, users.user_display_name, 
    COUNT(tweets.tweet_id) AS user_tweets_count, 
    COUNT(tweets_reply.tweet_reply_id) AS user_replies_count 
    FROM users 
    JOIN tweets ON tweets.tweet_user_id = users.user_id 
    JOIN tweets_reply ON tweets_reply.tweet_reply_user_id = users.user_id 
    WHERE (tweets_reply.tweet_reply_status = 1 AND tweets.tweet_status = 1) 
    GROUP BY users.user_id 
    ORDER BY (user_tweets_count + user_replies_count) DESC 
    LIMIT 10 

희망.

+0

참조 'user_tweets_count'가 지원되지 않습니다 (그룹 기능 참조) :( – Dino