我正在根据执行时间来学习查询优化的行为。我有3个表,分别是帖子,评论和用户。下面的查询通过返回发表评论多于2010年及其帖子数的用户和他们的计数来完美地工作。我相信可以对其进行优化,并且希望您对优化的代码进行解释。
每张桌子上的信息
SELECT pos_table.user_ID, pos_table.Username, comms, pos from
(SELECT
users.Id as 'user_ID', users.DisplayName as 'Username', count(posts.Id) as pos
FROM
users
INNER JOIN posts ON posts.OwnerUserId = users.Id
WHERE YEAR(posts.CreationDate) = 2010
group by users.Id
) pos_table
JOIN
(SELECT
users.Id as 'user_ID', users.DisplayName as 'Username', count(comments.Id) as
comms
FROM
users
INNER JOIN comments ON comments.UserId = users.Id
WHERE YEAR(comments.CreationDate) = 2010
group by users.Id
) comms_table
on pos_table.user_ID = comms_table.user_ID
HAVING comms > pos
order by user_ID
limit 50;
在上面的查询中,有两个子查询。一个用于发布信息,另一个用于评论。我想看看如何优化它以减少执行时间。
一件事突然向我扑来。您的两个子查询中都有这种类型的行。