당신의 접근 방식은 가장 간단합니다. 따라서 큰 로그와 비교하여 테스트 해보고 어떻게 수행되는지보십시오. 그것이 잘된다면 사물을 복잡하게 할 필요가 없습니다.
지난 달이 (모든 시간 제외)이 표시됩니다 가장 긴 기간 인 경우, 다음 로그를 가질 수있다 : 그것은 충분히 수행하지 않는 경우
는
, 다음이 더 복잡한 방법입니다 지난 달의 연극 만 포함 된 노래를 재생할 때마다 로그에 추가 한 다음 한 달이 넘은 레코드를 정기적으로 삭제합니다 (레코드를 삽입 할 때마다 또는 하루에 한 번). 그렇게하면 쿼리가 처리 할 레코드 수가 줄어 듭니다. 지난 주 순위는 날짜 범위에서 선택해야하지만 더 빨라야합니다.
여전히 성능이 충분하지 않은 경우, 가장 긴 시간 프레임에 걸쳐 확장되는 로그 테이블이 아닌 각 시간 프레임 (TopLastMonth, TopLastWeek, TopToday 등)에 대한 로그 테이블을 가질 수 있습니다. 이렇게하면 순위 쿼리는 항상 테이블의 모든 레코드를 요약하기 때문에 절대로 WHERE 절을 사용하지 않아도됩니다. DELETE 조회 만이 날짜에서 선택해야하며, 덜 자주 실행될 수 있습니다.
All Time 순위의 경우 각 노래에 대한 레코드가있는 표가 필요합니다. 노래를 재생할 때마다 재생 된 시간을 늘립니다. 전체 시간 순위가 로그 대신이 테이블을 보게됩니다.
넵, 내가 상상 한 것. 고맙습니다 ! – bratao