2016-10-01 1 views
1

私は、ハッカーのニュースやredditのような機能を使って注文したい投稿のテーブルを持っています - "好き嫌い"と最新性。問題:それは非常に遅いです(関連するすべてのフィールドが索引付けされていても)。どうすればスピードアップできますか?mysql - "トレンド"機能のreddit/hackernewsパフォーマンスの問題

クエリ(擬似):

SELECT * FROM Post WHERE foo = 'bar' ORDER BY 
((p.like_count - p.dislike_count)/POW(((UNIX_TIMESTAMP(NOW()) - p.time/3600) + 2, 1.5)) 

私の最初の本能は、計算しようとすることです私はPOW()のパフォーマンスがどのようなものか分かりませんが、クエリの外UNIX_TIMESTAMP(NOW())、のいずれか。

+0

あなたのクエリに 'EXPLAIN'出力を投稿できますか?私。 'EXPLAIN SELECT * FROM ..... etc'を実行してください。 – bchociej

+0

' POW(x、1.5) 'を' SQRT(x * x * x) 'で置き換えることはできますが、それは何の違いもないでしょう。 – maraca

答えて

0

私が使い終わった解決策は、数週間よりも古い投稿をすべて破棄することでした。トレンドは最近のコンテンツにのみ関心があるため、履歴のアーカイブから取り出す必要はありません。

$oldestAllowed = time() - 3600*24*14; // 14 days 
SELECT * FROM Post WHERE p.time > $oldestAllowed ORDER BY 
((p.like_count - p.dislike_count)/POW(((UNIX_TIMESTAMP(NOW()) - p.time/3600) + 2, 1.5)) 
関連する問題