如何加快这个mySQL查询(filesort问题)?

时间:2015-06-25 06:03:15

标签: php mysql

我有以下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解释查询显示文件时,我猜这是慢速问题,见下文:

enter image description here

你能帮助我,如何摆脱这个文件,或者如何优化这个查询,或者帮助我为这个查询添加适当的索引?

1 个答案:

答案 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;