この危険な関数の組み合わせを1つのSQL文で改善する方法を探しました...
コンテキストを説明するために、記事に関するいくつかの情報(article_id、author、...)を含むテーブルと、1つのtag_idを持つarticle_idを含む別のテーブルがあります。記事には複数のタグを含めることができるため、その2番目のテーブルには同じarticle_idと異なるtag_idを持つ2つの行を含めることができます。
私が欲しいもの(この場合は1354)と共通のタグが多い8つの記事のリストを取得するために、次のクエリを作成しました。
SELECT articles.article_id, articles.author, count(articles_tags.article_id) as times
FROM articles
INNER JOIN articles_tags ON (articles.article_id=articles_tags.article_id)
WHERE id_tag IN
(SELECT article_id FROM articles_tags WHERE article_id=1354)
AND article_id <> 1354
GROUP BY article_id
ORDER BY times DESC
LIMIT 8
それは非常に遅いです...50万の記事の90秒のように。
「時間順」の文を削除することで、ほぼ瞬時に機能しますが、削除すると、最も類似した記事を取得できなくなります。
私に何ができる?
ありがとう!!