가 부질없는 corollated 하위 쿼리최적화가 매우 빠르고
SELECT g.*, g.instaLikes + ( SELECT COUNT(*) FROM gallery_likes AS l WHERE l.gallery_id = g.id) AS likes
FROM gallery AS g
WHERE ( STATUS = 'approved')
ORDER BY g.moderated_at DESC , g.id ASC
선택으로,이 쿼리를 최적화하기 위해 노력 corollated, 나는 왼쪽을 시도 할 경우에도 느린 그 가입하세요.
SELECT g.*, (g.instaLikes + COUNT(l.id)) AS likes
FROM gallery AS g
LEFT JOIN gallery_likes AS l ON (g.id = l.gallery_id)
WHERE (STATUS = 'approved)
GROUP BY g.id
ORDER BY g.moderated_at DESC , g.id ASC
차라리 갤러리에서 n 배보다, 한 번 하위 쿼리를 실행할 수 있기 때문에, 개별적으로 쿼리를 수행 한 후 PHP 루프에서 함께 필드를 추가하는 가장 빠른 것 같다 옵션.
현재 갤러리에는 2,000 개의 행이 있고 gallery_likes에는 15,000 개의 행이 있습니다. 이 수치가 낮기 때문에 아직 최적화 할 필요가 없다고 생각했지만 첫 번째 쿼리는 20-30 초가 걸리고 LEFT JOIN은 100+ 초가 걸립니다!
감사합니다. 메인 쿼리의 각 행에 대해 실행해야한다고 생각했기 때문에 하위 쿼리를 수행하지 않았습니다. 이것은 훌륭한 수정이었습니다 .04 초로 다시 쿼리되었습니다. – dmorrow