0
我有一個表格視頻,我需要爲它創建頂級視頻。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。這裏是講EXPLAIN:
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的創建臨時表,以適應的結果和他們算賬排序?
在這種情況下可以採用哪些解決方案?
謝謝:)