2015-04-30 2 views
0

У меня проблема, мой медленный запрос все еще использует filesort. Я не могу избавиться от этого дополнительного флага. Не могли бы вы мне помочь?Как удалить этот файл?

Мой запрос выглядит следующим образом:

select `User`, 
     `Friend` 
from `friends` 
WHERE 
    (`User`='3053741' || `Friend`='3053741') 
    AND `Status`='1' 
ORDER by `Recent` DESC; 

Объяснить говорит следующее:

http://blindr.eu/stack/1.jpg

Моя структура таблицы и индексированные (это в словацком языке, но она должна быть такой же):

http://blindr.eu/stack/2.jpg

Нужна небольшая помощь, как избавиться от этого файла?

+0

Не размещайте фотографии текста здесь. Отправьте текст. Отходы вашего времени и пропускная способность. EXPLAIN неразборчиво. – EJP

ответ

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 
+0

спасибо :) я попробую –

+0

Итак, это помогло? – fancyPants

+0

i измененный запрос, чтобы не использовать сортировку файла и отсортировать его по массиву PHP :) –

Смежные вопросы