테이블 비디오가 있으며이를위한 최고의 비디오를 만들어야합니다.Mysql : 일정 기간 동안 행 수를 계산하십시오.
내가 비디오 행당 간단한 카운터를 사용하고 있었다 시작을와 같은 각 사용자보기에 업데이트 : 우리는 세 가지 다른 상판을 만들고 당 결과에 약간의 통일을 추가하기로 결정했다 그 후
UPDATE videos SET video_id=video_id+1 WHERE video_id=?
IP, 정상보다 정확한 만들려면 : - 하루 의 상단 - 주 의 상단 - 달
내가 별도의 행으로 각 사용자보기를 계산하는 새 테이블을 추가 한의 상단.
INSERT INTO video_views(video_id,date,ip) VALUES(video_id,current date,user ip)
video_views 테이블이 매우 커질 때까지 모든 것이 정상적으로 완료되었습니다. 여기
는 최고를위한 쿼리입니다 :
SELECT COUNT(vv.`view_id`) as counter,v.* FROM video v
LEFT JOIN video_views vv ON vv.`video_id`=v.`video_id`
WHERE vv.`date`>1320120130 /* It's the time = current time minus week or day */
GROUP BY v.`video_id`
ORDER BY counter DESC
LIMIT 50
문제는이 부분에서 시작 :
ORDER BY counter DESC
쿼리 완료 될 때까지 약 20 초 정도 걸립니다. 주문하지 않으면 보통 16-32ms입니다.
id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
1,SIMPLE,vv,range,date,video_id,date,5,NULL,149552,Using where; Using temporary; Using filesort
1,SIMPLE,v,eq_ref,PRIMARY,PRIMARY,4,movieslv_website.vv.video_id,1,
내가 그것을 때문에 "일시적으로 사용"의의 알고있는 것처럼, MySQL은 결과를 맞게, 그 후 그것들을 정렬하는 임시 테이블을 생성합니다 : 여기에 이야기를 EXPLAIN 무엇인가?
이 상황에서 어떤 솔루션을 적용 할 수 있습니까?
감사합니다 :)