USING FILESORT
не означает, что MySQL фактически использует файл. Именование немного «неудачно». Сортировка выполняется в памяти, пока данные вписываются в память. Тем не менее, посмотрите на переменную sort_buffer_size
. Но имейте в виду, что это переменная за сеанс. Каждое соединение с вашим сервером выделяет эту память.
Другой вариант, конечно, выполнить сортировку на уровне приложения. В любом случае у вас нет предложения LIMIT
.
О, и у вас слишком много индексов. Комбинированные индексы также могут использоваться, когда используется только самый левый столбец. Поэтому некоторые из ваших индексов являются избыточными.
Если производительность действительно, что большая часть проблемы, попробовать другой подход, причиной OR
в WHERE
делает это трудно, если не невозможно, чтобы избавиться от using filesort
с помощью индексов. Попробуйте этот запрос:
SELECT * FROM (
select "this is a user" AS friend_or_user, `User`, Recent
from `friends`
WHERE
`User`='3053741'
AND `Status`='1'
UNION ALL
select "this is a friend",
`Friend`, Recent
from `friends`
WHERE
`Friend`='3053741'
AND `Status`='1'
) here_needs_to_be_an_alias
ORDER by `Recent` DESC
Не размещайте фотографии текста здесь. Отправьте текст. Отходы вашего времени и пропускная способность. EXPLAIN неразборчиво. – EJP