我已经在一个 SQL 语句中搜索了改进这种危险的函数组合的方法......
为了让您了解上下文,我有一个表格,其中包含有关文章的几个信息(article_id、作者、...),另一个表格包含带有一个 tag_id 的 article_id。由于一篇文章可以有多个标签,因此第二个表可能有 2 行具有相同的 article_id 和不同的 tag_id。
为了获得与我想要的(在本例中为 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 秒。
通过删除“order by times”这句话,它几乎可以立即生效,但如果我这样做,我将不会得到最相似的文章。
我能做些什么?
谢谢!!