0

mysql クエリのヘルプが必要です。プライマリ テーブルに 2 つのカウント テーブルが結合されています。ユーザー アクティビティに関するものです。ユーザーのアクティビティ (コメントと記事) をカウントして合計し、1 つの変数にまとめてから、DESC で並べ替えます。メインテーブルはユーザー、サブテーブルは記事コメントです。

SELECT u.id, u.username, u.avatar,
   IF(comm.id, COUNT(DISTINCT comm.id), 0) AS count_comments,
   IF(comm.votes, SUM(DISTINCT comm.votes), 0) AS count_comments_votes,
   IF(article.id, COUNT(article.id), 0) AS count_articles,
   IF(article.views, SUM(DISTINCT article.views), 0) AS count_articles_views,
   (IF(comm.id AND comm.votes>2, COUNT(comm.id)*50, 0) + IF(comm.votes, SUM(comm.votes)*10, 0) + IF(article.id, COUNT(article.id)*200, 0) + IF(article.views, SUM(article.views)*1, 0)) AS points
FROM users AS u
   LEFT JOIN comments AS comm ON comm.id_user=u.id AND comm.date>='2013-05-01' AND comm.date<='2013-06-24'
   LEFT JOIN articles AS article ON article.id_user=u.id AND article.date>='2013-05-01' AND article.date<='2013-06-24'
   WHERE u.is_active='1'
   GROUP BY u.id
   HAVING points>0
   ORDER BY points DESC

クエリが11-13完了するまでに約 1 秒かかりましたが、これは長すぎます。何か案は ?いくつかのフィールドにインデックスを付けると、クエリが高速化される可能性がありますか?

4

0 に答える 0