mysql - Group BY 和 ORDER BY 优化

标签 mysql optimization query-optimization

我正在尝试优化对 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 秒...),我可以更改我的结构。真的,每一个提示都将不胜感激。

提前致谢。

最佳答案

试试这个

 GROUP BY feed_pool.qid ORDER BY 1 DESC LIMIT 20

关于mysql - Group BY 和 ORDER BY 优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13583322/

相关文章:

MySQL: "inner join on"性能: "where"与添加到 "on"

mysql - 如何在同一个查询中使用部分sql查询?

php - 网站字符集问题

mysql - 如何在不重启 MySQL 的情况下启用 MySQL 慢查询日志?

c++ - 几次比较怎么会比一些计算慢?

python - 获取字符串中不同索引数量所需的快速方法

c++ - 为什么 g++ 在启用 `-fpic` 的情况下不发出与构造函数相关的 noexcept 警告?

php - Fullcalendar MySQL 插入不起作用

php - 为什么我的SQL语句只返回一条记录?

MySQL - 为什么在这种情况下二级索引不会减少此查询的时间?