我正在尝试优化对 180 000 行表的查询。
SELECT
qid
FROM feed_pool
WHERE (
(feed_pool.uid IN
(SELECT uid_followed
FROM followers
WHERE uid_follower = 123 AND unfollowed = 0) AND feed_pool.uid != 123)
OR feed_pool.tid IN (SELECT tid FROM follow_tags WHERE follow_tags.uid = 123)
)
GROUP BY feed_pool.qid ORDER BY feed_pool.id DESC LIMIT 20
这个查询最糟糕的部分不是 WHERE 子句,而是 GROUP BY 和 ORDER BY 部分。
实际上,如果我只做 GROUP BY,就可以了。只是 ORDER BY 也很好。问题是当我同时使用两者时。
我尝试了不同的索引,现在我在 feedpool.qid 和 feedpool.uid 上使用了一个索引。
一个好的技巧是首先选择最后 20 行(ORDER BY),然后执行 GROUP BY。但显然这不是我想要做的,在某些情况下我最终没有 20 行。
我真的不知道该怎么办。如果它优化了我的请求(20 秒......),我可以改变我的结构。真的,每一个小费都将不胜感激。
提前致谢。