我目前在我的应用程序中运行当前的 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 的“新闻”项目,然后找到这些新闻项目也被标记的其他标签,以便用户进一步缩小“新闻”的范围" 具有更具体标签组合的项目。最终目标是从表中获取剩余的tag
相关tagid
列tags
。
我已经尝试过不同的尝试,JOIN
但未能选择tagid
新闻项目上附加了提供的标签的所有剩余 s。
这是我的EXPLAIN
SQL 结果,以防它们指出我遗漏的另一个缓慢原因:
id|select_type |table |type |possible_keys|key |key_len|ref |rows|Extra 1|PRIMARY |标签 |范围 |PRIMARY |PRIMARY| 4|空| 55|在哪里使用;使用文件排序 2|相关子查询|news_tags|index_subquery|tagid |tagid | 4|功能| 26|使用索引;使用哪里 3|相关子查询|news_tags|index |tagid |PRIMARY| 8|空| 11|在哪里使用;使用索引
只是为了澄清这个问题:我想要用标签 16 和 32 标记的新闻项目的剩余标签,而不是 16 或 32。抱歉有任何混淆。