次のMySQLクエリがありますが、これはシステムのCPUのプロセッサ時間を過度に消費しているようです。
クエリは、先週のコメント数が最も多いニュースを取得することを想定しています。
$timeago = strtotime("-1 week");
$query = "SELECT * ,
news.id,
news.title,
news.state,
news.date,
COUNT(comments.module_id) as comments_count,
comments.module,
comments.state
FROM news
LEFT OUTER JOIN comments on comments.module_id = news.id AND comments.module = 'news' AND comments.state = '1'
WHERE news.state = '2'
GROUP BY news.id, news.title, news.date
ORDER BY news.date >= $timeago DESC, comments_count DESC limit 6";
$result = mysql_query($query) or die (mysql_error());
$data = mysql_fetch_assoc($result);
クエリサーバーは私にぴったりです。先週コメント数が最も多かったニュースを分類します。ニューステーブルには17,290件の記録があります。このため、CPUの消費に適した方法でクエリを修正する方法を模索しています。
任意の提案を歓迎します。
説明計画は言う
| id | select_type | テーブル| タイプ| possible_keys | キー| key_len | ref | 行| 追加
| 1 | シンプル| ニュース| ref | 状態| 状態| 4 | const | 17282 | whereを使用する; 一時的な使用; filesortの使用
| 1 | シンプル| コメント| ref | module_id | module_id | 101 | saidasea_v2.news.id、const、const | 4