을 개선 나는 내가 최적화하고자하는 다음 쿼리가 :복잡한 쿼리 최적화 속도
SELECT
*, @rownum := @rownum + 1 AS rank
FROM (
SELECT
SUM(a.id = 1) as KILLS,
SUM(a.id = 2) as DEATHS,
SUM(a.id = 3) as WINS,
tb1.totalPlaytime,
p.playerName
FROM
(
SELECT
player_id,
SUM(pg.timeEnded - pg.timeStarted) as totalPlaytime
FROM playergame pg
INNER JOIN player p
ON pg.player_id = p.id
WHERE pg.game_id IN(1, 2, 3)
GROUP BY
p.id
ORDER BY
p.playerName ASC
) tb1
INNER JOIN playeraction pa
ON pa.player_id = tb1.player_id
INNER JOIN action a
ON pa.action_id = a.id
INNER JOIN player p
ON pa.player_id = p.id
GROUP BY
p.id
ORDER BY
KILLS DESC) tb2
WHERE tb2.playerName LIKE "%"
은 어떻게 든 내가이 MySQL의에 적합하지 있다는 느낌을 데있다. 좋은 통계적 접근을 위해 여러 테이블에서 많은 조치를 취하지 만 모든 것이 느려집니다. (? 아마도 빅 데이터)
이 내가 일을 시도
이제내 모델 않습니다 : 나는를 결합
결합 뷰에 조인 많은 JOINS가 VIEW에 들어갑니다. 이것은 나에게 개선을주지 않았다.
색인 테이블
내가이 속도를했다하지만 난 0.613s 아래의 전체 결과 집합을 얻을 관리 할 수 있으며, 자주 사용하는 키를 색인.
:작업 테이블에서 시작하고 사용 왼쪽
이 나에게 약간 다른 접근 방식을 주었다 조인하지만 아직 속도가 느린 것을 계속 조인
인덱스 (첫 번째 예는 여전히 가장 빠른)
는 어떤 힌트, 팁, 추가는, 개선은 환영
글쎄, 얼마나 많은 레코드를 다루고 있습니까? 10kajillion 기록 데이터베이스를 통과하는 데 0.613 초가 매우 인상적입니다. 하나의 레코드를 스캔하는 데 0.613 초가 걸리는 것은 매우 불쌍한 것입니다. –
인덱스를 사용하지 못하는 부분을 볼 수 있도록'EXPLAIN' 출력을 게시하십시오. – Barmar
죄송합니다, 나는 그걸 잊어 버렸습니다. 약 146000 개의 레코드가 있습니다. 빠르게 증가해야합니다. –