2012-02-12 10 views
0

私はテーブルビデオを持っており、そのためのトップビデオを作成する必要があります。私はビデオ行あたりのシンプルなカウンタを使用して、そのような各ユーザーのビューでそれを更新したスタートのためにMysql:期間中の行数をカウントする

:私たちは、3つの異なるトップを作成して、あたりの結果にいくつかの統一を追加することを決定した。その後

UPDATE videos SET video_id=video_id+1 WHERE video_id=? 

トップスをより正確にするには、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は結果をフィットし、その後、それらを並べ替えるために一時テーブルを作成しますか?

この場合、どのような解決策を適用できますか?

感謝:)

答えて

0

は左を交換してみてください内部で合流参加し、また、すべてのフィールドvを選択しないようにしてください。*、ちょうど必要なもの。またthisを見てください。

メモリ内の一時テーブルの最大サイズはtmp_table_sizeの最小値であるとmax_heap_table_sizeはたぶん、メモリ内の一時テーブルがあまりにも速度が向上します増加

値。

関連する問題