【发布时间】:2012-11-23 23:48:06
【问题描述】:
我已经在一个 SQL 语句中搜索了改进这种危险的函数组合的方法......
为了让您了解上下文,我有一个表格,其中包含有关文章的若干信息(article_id、作者、...),另一个表格包含 article_id 和一个 tag_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”这句话,它几乎立即生效,但如果我这样做,我将不会得到最相似的文章。
我能做什么?
谢谢!!
【问题讨论】:
-
WHERE id_tag IN (SELECT article_id FROM articles_tags WHERE article_id=1354)- 对吗?我的意思是.. id_tag IN (SELECT article_id ..似乎您尝试通过选择article_ids 来查找id_tags。我可能错了。 -
这是什么 SQL 供应商?
标签: sql tags count sql-order-by