【发布时间】:2012-05-10 09:29:22
【问题描述】:
我目前在我的应用程序中运行当前的 MySQL 查询最多需要 10 秒:
SELECT tagid, tag FROM tags WHERE tagid IN
(SELECT DISTINCT tagid FROM news_tags WHERE newsid IN
(SELECT newsid FROM news_tags WHERE tagid IN (16,32)
GROUP BY newsid HAVING COUNT(newsid)>=2))
AND tagid NOT IN (16,32) ORDER BY level, tagid
使用的表格是:
- 表
news_tags,列newsid,tagid - 表
tags,列tagid、tag、level
查询的目的是找到已经被标记为tagid 16 和 32的标签的“新闻”项目,然后找到这些新闻项目也被标记的其他标签,例如允许用户使用更具体的标签组合进一步缩小“新闻”项目的范围。最终目标是从tags 表中获取剩余的相关tag 和tagid 列。
我在等效的JOIN 上尝试了不同的尝试,但未能在附加了提供的标签的新闻项目上选择所有剩余的tagids。
这是我的EXPLAIN SQL 结果,以防它们指出我遗漏的另一个缓慢原因:
只是为了澄清问题:我想要用 16 和 32 标记的新闻项目的剩余标记,而不是 16 或 32。抱歉有任何混淆。
【问题讨论】: