我有以下MYSQL查询:
select IF(`User`='101',`Friend`,`User`) as `Kto`,`Recent`
from `friends`
WHERE (`User`='101' || `Friend`='101') AND `Status`=1
HAVING `Kto` IN (SELECT `Id` FROM `users` WHERE `Id`=`Kto` AND `Online`>='100')
ORDER by Recent DESC limit 11使用ORDER by Recent DESC查询需要更长的时间(显示行0- 10 (总共11行,查询耗时0.0090秒),最近: 9337663 - 7683644)
如果我不使用Order by,它就太快了(显示第0- 10行(总共11行,查询耗时0.0005秒))
在explain query with ORDER by显示文件排序中,我猜这是速度慢的问题,如下所示:

你能帮助我,如何摆脱这个文件排序,或者如何优化这个查询,或者帮助我为这个查询添加合适的索引吗?
发布于 2015-06-25 14:18:19
你可以试试这个,伙计:
SELECT
IF(f.`User`='101',f.`Friend`,f.`User`) as `Kto`,
f.`Recent`
FROM
`friends` f
INNER JOIN `users` u ON u.`Id` IN (f.`User`, f.`Friend`)
WHERE
(f.`User` = '101' || f.`Friend` = '101')
AND f.`Status` = 1
AND u.`Online` >= '100'
ORDER BY
f.Recent DESC
LIMIT 11;https://stackoverflow.com/questions/31042359
复制相似问题