사용자가 주어진 필터 집합 (예 : 날짜 범위)에 대한 통계를 요청할 수 있어야하는 상당히 큰 통계 시스템을 구축 중입니다.MySQL의 쿼리 캐싱
가SELECT player_id, SUM(kills) as kills
FROM `player_cache`
GROUP BY player_id
ORDER BY kills DESC
LIMIT 10
OFFSET 30
상기 질의 (30) (결과, 즉 3 '페이지')에 의한 결과를 상쇄이 각 플레이어했다 명의 player_id 및 양을 포함하여 10 개 개의 결과를 반환하는 단순 쿼리이다. 그런 다음 사용자가 '다음'페이지를 선택하면 30 대신 OFFSET 40이 사용됩니다.
LIMIT/OFFSET 쌍이 동일한 데이터 집합에서 사용되고 있음에도 불구하고 캐시되지 않습니다. SUM()을 다시 수행하여 결과를 10만큼 더 상쇄합니다.
위의 예는 더 많은 필드를 반환하는 매우 큰 쿼리의 단순화 된 버전이며 매우 오랜 시간 (20 초 이상 소요되며 시스템이 커질수록 길어집니다)입니다.
그래서 LIMIT/OFFSET이 적용되기 전에 상태를 캐싱하여 페이지로드 속도를 높이는 솔루션을 찾고 있습니다.
쿼리 필터로 인해 불행히도이 작업을 수행 할 수 없습니다. 다른 필터는 반드시 긴 쿼리를 다시 수행해야합니다.이 쿼리는 함께 사용해야하지만 LIMIT/OFFSET 문제를 해결하려고합니다. 이 방법을 사용할 수있는 유일한 방법은 각 필터 유형에 대해 여러 개의 요약 테이블을 갖는 것입니다. 날짜 범위가 무한 할 경우 무한합니다. –
필터 요구 사항과 일치하도록 요약 테이블을 올바르게 디자인하는 방법이 있어야합니다 . (아마도 모든 관련 필터에 대한 요약 테이블에 필드를 추가하여). –
어떻게? 기간 필터를 사용하면 가능한 쿼리의 양이 무한합니다! –