таблица в 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 не было .
Как бы сначала выполняется запрос а потом для сортировки уже выбранных результатов нужен второй обход уже по ним, как я понял.
Запрос который привел для примера он упрощенный просто, стал искать тяжелые запросы и наткнулся на это. Подумал, что какая то ошибка в запросе.
Как бы сначала выполняется запрос а потом для сортировки уже выбранных результатов нужен второй обход уже по ним, как я понял.
Запрос который привел для примера он упрощенный просто, стал искать тяжелые запросы и наткнулся на это. Подумал, что какая то ошибка в запросе.
Спустя 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.
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 ... хотя запрос простой
В приведенном мною примере mysql не может обойтись без Using filesort ... хотя запрос простой
Спустя 3 минуты, 43 секунды (13.02.2012 - 12:19) GET написал(а):
Placido
В реально не могу поставить составной индекс просто этот пример упрощенный
В реально не могу поставить составной индекс просто этот пример упрощенный
Спустя 8 часов, 2 минуты, 52 секунды (13.02.2012 - 20:22) Oyeme написал(а):
Это разве проблема? Это нормальное повидение для filesort.
Не всегда плохо использовать: using "filesort" and using " temporary"
Подробней: http://dev.mysql.com/doc/refman/5.0/en/ord...timization.html
Не всегда плохо использовать: 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).
В Вашем случаи это нормальное поведение для Вашего случая и это не является проблемой.
_____________
Не тот велик, кто не падал, а тот кто падал и поднимался.