올바르게 작동하는 쿼리를 작성했습니다. 그러나 실행하는 데 더 많은 시간이 걸립니다. 현재 쿼리를 어떻게 최적화 할 수 있는지 이해할 수 없습니다.현재 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을 포맷하여 더 넓은 구조를 볼 수있게하는 것이 더 낫습니다. 독자의 삶을 편하게 만듭니다. 사람들이 함께 즐길 수있는 SQL Fiddle을위한 업 보봇 (upvotes). – halfer
또한 각 테이블의 행 수와 쿼리 실행 시간 (대략)을 알려주십시오. 설명 계획을 생성 할 수 있다면 도움이 될 것입니다. – halfer
@halfer sqlfiddle 데모가 추가되었습니다. –