[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Почему появляется using filesort в запросе
GET
Здравствуйте, не могу понять причину появления using filesort в простом запросе.

таблица в 50 тыс. записей

 SELECT * FROM `tab` WHERE `number`='1' ORDER BY `id` 


id - первичный автоключ, по number есть индекс (не совместный)

EXPLAIN SELECT * FROM `tab` WHERE `number`='1' ORDER BY `id`

дает результат

Using where; Using filesort

почему? Using filesort - нежелательный результат насколько я понимаю



Спустя 8 минут, 29 секунд (13.02.2012 - 09:01) GET написал(а):
SELECT * FROM `tab` ORDER BY `id` 


даже в таком не нужном запросе пишет Using filesort ...

не нужном по тому что ORDER BY `id` не нужно

но вот так может быть нужно
SELECT * FROM `tab` ORDER BY `id` DESC 




Спустя 4 минуты, 5 секунд (13.02.2012 - 09:05) GET написал(а):
или нечего страшного в Using filesort нет...главное чтоб Using temporary не было smile.gif.

Как бы сначала выполняется запрос а потом для сортировки уже выбранных результатов нужен второй обход уже по ним, как я понял.

Запрос который привел для примера он упрощенный просто, стал искать тяжелые запросы и наткнулся на это. Подумал, что какая то ошибка в запросе.

Спустя 30 минут, 46 секунд (13.02.2012 - 09:36) Oyeme написал(а):
Цитата
The truth is, filesort is badly named. Anytime a sort can’t be performed from an index, it’s a filesort.


The amount of memory available to filesort() is controlled by @@sort_buffer_size variable. if the sorted data doesn’t fit into memory (i.e. there is more than one chunk), filesort uses a temporary file to store the chunks.

user posted image

http://s.petrunia.net/blog/?p=24

Спустя 13 минут, 14 секунд (13.02.2012 - 09:49) Placido написал(а):
Поставьте составной индекс (`number`, `id`) и сортировка будет осуществляться по нему ("Using index").

Спустя 2 часа, 25 минут, 51 секунда (13.02.2012 - 12:15) GET написал(а):
Oyeme

В приведенном мною примере mysql не может обойтись без Using filesort ... хотя запрос простой

Спустя 3 минуты, 43 секунды (13.02.2012 - 12:19) GET написал(а):
Placido

В реально не могу поставить составной индекс просто этот пример упрощенный

Спустя 8 часов, 2 минуты, 52 секунды (13.02.2012 - 20:22) Oyeme написал(а):
Это разве проблема? wink.gif Это нормальное повидение для filesort.

Не всегда плохо использовать: using "filesort" and using " temporary"
Подробней: http://dev.mysql.com/doc/refman/5.0/en/ord...timization.html

Цитата
If you want to increase ORDER BY speed, check whether you can get MySQL to use indexes rather than an extra sorting phase. If this is not possible, you can try the following strategies:

Increase the size of the sort_buffer_size variable.

Increase the size of the read_rnd_buffer_size variable.

Use less RAM per row by declaring columns only as large as they need to be to hold the values stored in them. For example, CHAR(16) is better than CHAR(200) if values never exceed 16 characters.


(Так как у Вас таблица и так оптимизирована.
Точение всего Вам нечего оптимизировать.)

У Вас огромные данные в таблице более чем 50к.Денормализации Ваша таблица не подлежит.
В данном случаи установка индексов(PRIMARY/UNIQUE KEY).

В Вашем случаи это нормальное поведение для Вашего случая и это не является проблемой. wink.gif


_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.