Mysql 分组优化和排序优化
我正在尝试优化一个包含180000行的表上的查询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
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)
订购?你的表上有什么索引?看起来很有效。。。我真的不明白为什么指定列索引比指定其名称要快。。。?无论如何谢谢你!