MySQL « что значит Using filesort при explain запроса

Есть запрос который работает не очень быстро, когда выполняю explain вижу Using where, Using filesort.

Using where и так понятно, у меня запрос с where классом, а вот что значит Using filesort?

1 ответов


Фактически - это полный перебор по таблице. Может появится по двум причинам (основным):

  • В запросе есть GROUP BY или ORDER BY, по полю (полям), которые не включены в индекс. Причем, если сортировка/группировка идет по нескольким полям, то в принципе достаточно индекса по одному из полей, но для большей эффективности лучше применять составной индекс
  • Более редкая причина состоит в том, что в таблице так мало записей, что оптимизатор считает, что "дешевле" выполнить полный перебор, чем копаться в индексе. Об этом написано тут


Если запрос именно filesort а не temp table, то один из способов ускорения "в лоб" это предварительная сортировка таблицы по полю, используемому в запросе. На больших таблицах очень даже бывает так, что многократно ускоряется запрос. Кроме того, если активно используется отсечка при помощи limit, то дополнительно снизить нагрузку на сервер удастся при помощи партицирования таблицы на части, кратные лимиту.
А в целом, конечно filesort не есть хорошо.
Кстати говоря, если в запросах использхцется join то там свои нюансы и методы. А в целом, конечно для полной картины хотелось бы видеть сам запрос.