按 select count(*) 排序并且 LIMIT 非常慢

Order by select count(*) and LIMIT is very slow

我的程序中有这个查询,当我使用查询中的 select count(*) 字段进行排序时,我不知道为什么,运行 执行该查询时速度很慢.

问题是当我从 posts_count 进行一些排序时,它 运行 比我从其他字段进行排序要慢。

查询如下: select 'tags'.*, (select count(*) from 'posts' inner join 'post_tag' on 'posts'.'id' = 'post_tag'.'post_id' where 'tags'.'id' = 'post_tag'.'tag_id') as 'posts_count' from 'tags' order by 'posts_count' asc limit 15 offset 0;

执行时间如下:

请有人帮我改进这个查询,谢谢。

我期望的是查询可以 运行 更快。

SELECT t.*, COUNT(*) AS count
FROM tags AS t
LEFT OUTER JOIN post_tag AS pt ON t.id = pt.tag_id
GROUP BY t.id
ORDER BY count ASC LIMIT 15 OFFSET 0;

您应该确保 post_tag 有一个以 tag_id 列开头的索引。你没有在你的问题中包含你的 table 定义,所以我必须假设索引在那里。如果主键以tag_id开头,那也可以。

您不需要加入 posts,如果我可以假设 post_tag 中存在一行,则意味着它必须引用 posts 中的现有行。您只需加入post_tag.

即可获取您需要的信息