Суть вопроса сводится к тому, как оптимизировать запрос вида
SELECT * FROM (SELECT ...... FROM table1 UNION ALL SELECT ...... FROM table2)
OFFSET ... LIMIT ....
Запрос исполняется крайне медленно, дураку понятно что делается полная выборка данных из таблиц, а затем они режутся LIMIT-ом, что можно предпринять в такой ситуации?
Спустя 38 минут, 21 секунда (11.12.2011 - 23:51) sergeiss написал(а):
Тебе надо подумать, какие установить условия и для архива, и для текущей таблицы. Чтобы выбирались не все данные, а только нужные.
Скорее всего, они у тебя по датам как-то отсортировываются? (это только моё предположение). Если да, то из этого и надо исходить.
И еще - я не понял, зачем у тебя стоит SELECT * FROM (... )? То есть, зачем делать повторную выборку из только что полученных данных - на это же ведь тоже надо время.
Скорее всего, они у тебя по датам как-то отсортировываются? (это только моё предположение). Если да, то из этого и надо исходить.
И еще - я не понял, зачем у тебя стоит SELECT * FROM (... )? То есть, зачем делать повторную выборку из только что полученных данных - на это же ведь тоже надо время.
Спустя 13 минут, 28 секунд (12.12.2011 - 00:05) caballero написал(а):
Цитата |
И еще - я не понял, зачем у тебя стоит SELECT * FROM (... )? |
лимит на общую выборку
по теме - можно попробовать выбрать юнионом сначала значение ключевых полей (по идексу будет бытро)
затем после лимита сделать уже полноценную выборку с условием IN для каждой таблицы в юнионе
Спустя 21 минута, 47 секунд (12.12.2011 - 00:26) sergeiss написал(а):
Цитата (caballero @ 12.12.2011 - 01:05) |
(по идексу будет быстро) |
Да, кстати


И еще для ускорения можно выбирать не все поля, т.к. данные пишутся во временную таблицу. А только одно ключевое поле, какой-нибудь АйДи, например. Это должно быть сделано быстрее. И уже затем делать выборку из таблиц со всеми нужными полями, где этот содержится АйДи из полученного списка.
Спустя 8 часов, 50 минут, 4 секунды (12.12.2011 - 09:16) Семён написал(а):
Индексы стоят))) Нашёл причину.
Запрос тормозил изза того, что сама база располагалась на файловой системе FAT32 с свободным местом 250 мб. (флешка). И мускулу не хватала места для tmp операций. (на 240 мб, он заплакал что таблицы вообще нада восстанавливать)

Запрос тормозил изза того, что сама база располагалась на файловой системе FAT32 с свободным местом 250 мб. (флешка). И мускулу не хватала места для tmp операций. (на 240 мб, он заплакал что таблицы вообще нада восстанавливать)