我有posts
,votes
和comments
表。每个帖子可以有N个“是的投票”,N“没有投票”和N个评论。我试图获得按赞成票数排序的一组帖子。SQL加入,计数()和按“是”/“否”投票排序'帖子'
我有一个查询完成此操作,但运行速度太慢。在1500个帖子和15K票的数据集上,我的开发机器花费了0.48秒。我怎样才能优化这个?
select
p.*,
v.yes,
x.no
from
posts p
left join (select post_id, vote_type_id, count(1) as yes from votes where (vote_type_id = 1) group by post_id) v on v.post_id = p.id
left join (select post_id, vote_type_id, count(1) as no from votes where (vote_type_id = 2) group by post_id) x on x.post_id = p.id
left join (select post_id, count(1) as comment_count from comments group by post_id) p on p.confession_id = p.id
order by
yes desc
limit
0, 10
编辑:
Votes
Comments
和既具有post_id
FK- 在剃光.1sec关闭查询执行的
votes
表上vote_type_id
post_id
和添加一个索引。
你在每个表上定义了哪些键/索引? – Amber 2009-11-18 20:44:38