2011-04-07 6 views
2

플레이어 소프트웨어가 있습니다. 그것에는 SQLite 데이터베이스가 있습니다.SQLite 데이터베이스에서 "지난주 인기 곡"순위를 디자인하는 방법은 무엇입니까?

저는 SQL 초보자, 그리고 미안 모든 시간에서 수 연주 ranking.The 위로, 지난 주, 지난 달, 등

"재생 최고"는 할 수있는 최선의 방법이 될 수있는 방법을 추측

날짜와 시간과 함께 연주 한 모든 음악을 로깅 할 때 범위 내의 날짜로 선택을 수행하지만 매우 무거워 보입니다.

더 좋은 방법이 있을까요?

답변

2

당신의 접근 방식은 가장 간단합니다. 따라서 큰 로그와 비교하여 테스트 해보고 어떻게 수행되는지보십시오. 그것이 잘된다면 사물을 복잡하게 할 필요가 없습니다.

지난 달이 (모든 시간 제외)이 표시됩니다 가장 긴 기간 인 경우, 다음 로그를 가질 수있다 : 그것은 충분히 수행하지 않는 경우

, 다음이 더 복잡한 방법입니다 지난 달의 연극 만 포함 된 노래를 재생할 때마다 로그에 추가 한 다음 한 달이 넘은 레코드를 정기적으로 삭제합니다 (레코드를 삽입 할 때마다 또는 하루에 한 번). 그렇게하면 쿼리가 처리 할 레코드 수가 줄어 듭니다. 지난 주 순위는 날짜 범위에서 선택해야하지만 더 빨라야합니다.

여전히 성능이 충분하지 않은 경우, 가장 긴 시간 프레임에 걸쳐 확장되는 로그 테이블이 아닌 각 시간 프레임 (TopLastMonth, TopLastWeek, TopToday 등)에 대한 로그 테이블을 가질 수 있습니다. 이렇게하면 순위 쿼리는 항상 테이블의 모든 레코드를 요약하기 때문에 절대로 WHERE 절을 사용하지 않아도됩니다. DELETE 조회 만이 날짜에서 선택해야하며, 덜 자주 실행될 수 있습니다.

All Time 순위의 경우 각 노래에 대한 레코드가있는 표가 필요합니다. 노래를 재생할 때마다 재생 된 시간을 늘립니다. 전체 시간 순위가 로그 대신이 테이블을 보게됩니다.

+0

넵, 내가 상상 한 것. 고맙습니다 ! – bratao

관련 문제