Как удалить эту сортировку файлов?
У меня проблема, мой медленный запрос все еще использует сортировку файлов. Я не могу избавиться от этого лишнего флага. Не могли бы вы мне помочь?
Мой запрос выглядит так:
select `User`,
`Friend`
from `friends`
WHERE
(`User`='3053741' || `Friend`='3053741')
AND `Status`='1'
ORDER by `Recent` DESC;
Объясните, это говорит:
Моя таблица и структура проиндексированы (она на словацком языке, но должна быть одинаковой):
Нужна небольшая помощь, как избавиться от этой файловой сортировки?
1 ответ
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