Xpoint
   [напомнить пароль]

Как избавиться от Using filesort?

2002-07-17 16:50:22 [обр] Maxim V. Presnyakov [досье]

При запросе explain выдает:
explain select id from table where id>49681 and (cat1=344 or cat2=344 or cat3=344) and region=3 order by datepub limit 1;

+--------+------+--------------------------+--------+---------+-------+-------+----------------------------
+
| table | type | possible_keys | key | key_len | ref | rows | Extra
|
+--------+------+--------------------------+--------+---------+-------+-------+----------------------------
+
| table | ref | id,cat1,cat2,cat3,region | region | 4 | const | 12470 | where used; Using filesort
|
+--------+------+--------------------------+--------+---------+-------+-------+----------------------------

В мануале говорится, что такие запросы тормозные, поскольку приходится много записей лопатить. Ну и как видно из запроса, перебрано записей больше 12 тысяч, чтобы выдать ответ. Когда таких запросов много, сервер начинает изрядно подтормаживать. Как бы это соптимизировать?

спустя 18 часов [обр] Oreola 18.09.02 [досье]
Не знаю как избавиться от Using filesort, но на счет того, что бы немного оптимизнуть запрос - можно попробывать...
Поставте region=3 на первое место, или, если на Ваш взгляд записей с id>49681 больше чем с region=3, то сначала поставте id, потом region, а уже потом уже cat...
спустя 1 день 4 часа [обр] Максим Деркачев [досье]
Filesort используется для всех запросов, которые используют группировку и/или сортировку и при этом затрагивают большой объем данных - когда временная таблица, как считает MySQL, не может быть полностью размещена в памяти. Такие запросы тормозные не столько потому, что много записей, а потому, что приходится создавать временный результат на диске, который затем и сортируется.
К тому же, возможно, у тебя выбран не самый оптимальный индекс для выборки - region. Поиграйся с вычисляемыми полями, чтобы зацепились другие индексы.
Powered by POEM™ Engine Copyright © 2002-2005