SELECT bookmarkID,COUNT(bookmarkID) AS count
FROM bookmark_tag_map
GROUP BY tagID,bookmarkID
HAVING tagID IN (-----"tagIDList"-----) AND count >= N
这需要很长时间才能返回结果。我在某处读到如果制作一个索引,其中它有tagID,bookmarkID在一起,我会得到更快的结果。一段时间后我创建了索引。再次尝试查询,但似乎这个查询没有使用我所做的新索引。我运行了EXPLAIN,看到它确实是真的。我现在的问题是如何强制执行查询以使用特定索引?还欢迎评论其他方法来加快查询速度。感谢
答案 0 :(得分:3)
首先,在group by子句中使用tagID,但在选定的字段中没有,这很奇怪,因为你不知道计数属于哪个标签。您确定要在分组中使用tagID吗?如果您只想要某些标签集的最常用书签,那么您不需要它。 我提出加快速度的建议是将tagID条件移到where子句中:
SELECT bookmarkID,COUNT(bookmarkID) AS count
FROM bookmark_tag_map
WHERE tagID IN (-----"tagIDList"-----)
GROUP BY bookmarkID
HAVING count >= N
这应该快得多,但对于1200万条记录来说,可能仍然不够快,无法在没有缓存的情况下在频繁调用的页面上使用它。
答案 1 :(得分:2)