몇 가지 subselect를 사용하여 약간의 불쾌한 쿼리가 발생하여 실제로 속도가 느려집니다. 이미 쿼리를 캐싱 중이지만 그 결과가 자주 변경되며 쿼리 결과는 트래픽이 많은 페이지에 표시됩니다.어떻게이 쿼리를 최적화 할 수 있습니까?
SELECT user_id, user_id AS uid, (SELECT correct_words
FROM score
WHERE user_id = `uid`
ORDER BY correct_words DESC, incorrect_words ASC
LIMIT 0, 1) AS correct_words,
(SELECT incorrect_words
FROM score
WHERE user_id = `uid`
ORDER BY correct_words DESC, incorrect_words ASC
LIMIT 0, 1) AS incorrect_words
FROM score
WHERE user_id > 0
AND DATE(date_tested) = DATE(NOW())
GROUP BY user_id
ORDER BY correct_words DESC,incorrect_words ASC
LIMIT 0,7
쿼리의 목적은 그 날에 대한 사용자의 최고 점수를 골라 있지만 대신에 따라서 자신의 점수 (모두의 사용자의 가장 높은 점수 인스턴스를 보여, 예를 들어, 경우에 하나의 사용자 실제로 그 날의 상위 10 점 중 4 점을 얻었습니다. 사용자의 최고 점수 만 표시하고 나머지는 삭제하고 싶습니다.)
시도해 보았으나 나는이 쿼리의 결과를 다른 방식으로 복제하지 않았습니다. 현재 평균 실행 시간은 약 2 초이지만 표가 커질수록 크게 늘어날 수 있습니다.
의견이 있으십니까?
표 정의 및 색인을 표시하십시오. – Asaph
먼저 잘못된 형식으로 자신과 우리를 대면하지 마십시오. 나는 당신의 질의를 다시 읽을 수 있도록 다시 포맷했다. 연산자 주위의 공백을 사용하고 쉼표 뒤에 각 SQL 문에 대해 새 행을 사용하십시오. – markus