MySQL 查询优化 - 子查询 + 多连接
Posted
技术标签:
【中文标题】MySQL 查询优化 - 子查询 + 多连接【英文标题】:MySQL Query Optimization - Sub Queries + Multiple Joins 【发布时间】:2013-10-04 11:23:37 【问题描述】:如何优化此查询?获取 10 行需要 2-3 秒。
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
【问题讨论】:
您不需要子查询,只需要字段列表中的 count(tweet_id)、count(tweet_reply_id)(您已经加入表格)。 【参考方案1】: 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
希望这会有所帮助。
【讨论】:
不支持引用'user_tweets_count'(引用组函数):(以上是关于MySQL 查询优化 - 子查询 + 多连接的主要内容,如果未能解决你的问题,请参考以下文章