0
我写了一个正常工作的查询。但是需要更多时间来执行。我无法理解如何优化当前查询。如何优化我当前的Mysql查询
这里将会有一千或一百万的数据。喜欢不喜欢表每个用户每个喜欢/不喜欢插入一个新行。
我的查询:
select i.id,i.category,i.url,i.upload_by,i.upload_date,
(select count(*) from `like_dislike` where `ulike`='1' and `imageid`=i.id) AS 'allLike',
(select count(*) from `like_dislike` where `ulike`='1' and `imageid`=i.id and i.category !='4' and FROM_UNIXTIME(performdate)>= NOW() - INTERVAL '1' DAY) AS 'daytotalLike',
(select count(*) from `like_dislike` where `ulike`='1' and `imageid`=i.id and i.category !='4' and FROM_UNIXTIME(performdate)>= NOW() - INTERVAL '7' DAY) AS '7daytotalLike',
(select count(*) from `like_dislike` where `ulike`='1' and `imageid`=i.id and i.category !='4' and FROM_UNIXTIME(performdate)>= NOW() - INTERVAL '30' DAY) AS '30daytotalLike',
(select count(*) from `like_dislike` where `ulike`='1' and `imageid`=i.id and i.category !='4' and FROM_UNIXTIME(performdate)>= NOW() - INTERVAL '90' DAY) AS '90daytotalLike',
i.status from `image` as i, `like_dislike` as likeDislike
WHERE i.status='approved' and i.id=likeDislike.imageid and FROM_UNIXTIME(likeDislike.performdate)>= NOW() - INTERVAL '90' DAY
GROUP BY i.id ORDER BY '90daytotalLike' DESC Limit 50
你可以添加你的'CREATE TABLE'语句吗?以及你有什么索引。最好格式化这个SQL,这样我们就可以看到广泛的结构 - 让读者更容易。 Upvotes for SQL小提琴,人们可以玩。 – halfer 2015-02-07 09:34:01
另外,让我们知道(粗略)每个表有多少行,以及查询运行的时间。如果您可以生成解释计划,那也可以帮助您。 – halfer 2015-02-07 09:35:22
@halfer sqlfiddle演示添加。 – 2015-02-07 10:34:57