我有以下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秒))
在使用ORDER解释查询显示文件时,我猜这是慢速问题,见下文:
你能帮助我,如何摆脱这个文件,或者如何优化这个查询,或者帮助我为这个查询添加适当的索引?
答案 0 :(得分:0)
你可以试试这个,交配:
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;