Mysql 分组优化和排序优化

Mysql 分组优化和排序优化,mysql,optimization,query-optimization,Mysql,Optimization,Query Optimization,我正在尝试优化一个包含180000行的表上的查询 SELECT qid FROM feed_pool WHERE ( (feed_pool.uid IN (SELECT uid_followed FROM followers WHERE uid_fo

我正在尝试优化一个包含180000行的表上的查询

    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 part

事实上,如果我只做分组练习,就可以了。只要按订单也可以。问题是当我同时使用两者时

我尝试了不同的索引,现在正在feedpool.qid和feedpool.uid上使用索引

一个好方法是首先选择最后20行(按顺序),然后按进行分组。但很明显,这并不完全是我想要做的,在某些情况下,我最后没有20行

我真的不知道该怎么办。我可以改变我的结构,如果它优化了我的请求(20秒…)。真的,每一个小费都会很感激的


提前谢谢

你听说过加入
吗?子查询总是不利于性能。
试着这样做:

SELECT feed_pool.qid, followers.uid as fuid, follow_tags as ftuid
FROM feed_pool
    LEFT JOIN followers
        ON feed_pool.uid = followers.uid_followed 
            AND followers.uid_follower = 123 
            AND followers.unfollowed = 0 
            AND feed_pool.uid != 123
    LEFT JOIN follow_tags
        ON feed_pool.tid = follow_tags.tid 
        AND follow_tags.uid = 123
WHERE
    fuid IS NOT NULL
    OR ftuid IS NOT NULL
ORDER BY feed_pool.id DESC 
LIMIT 20
试试这个

 GROUP BY feed_pool.qid ORDER BY 1 DESC LIMIT 20

您是否尝试过按分钟(feed\u pool.id)
订购?你的表上有什么索引?看起来很有效。。。我真的不明白为什么指定列索引比指定其名称要快。。。?无论如何谢谢你!