按 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
.
即可获取您需要的信息
我的程序中有这个查询,当我使用查询中的 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
.