[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Постраничка при UNION
Семён
Есть 2-ве таблицы, примерно схожи по своей структуре и данным (1 таблица живые данные, 2-ая архив). Теперь пришлось сделать поиск/постраничку и управление ими соответственно.
Суть вопроса сводится к тому, как оптимизировать запрос вида
SELECT * FROM (SELECT ...... FROM table1 UNION ALL SELECT ...... FROM table2)
OFFSET ... LIMIT ....

Запрос исполняется крайне медленно, дураку понятно что делается полная выборка данных из таблиц, а затем они режутся LIMIT-ом, что можно предпринять в такой ситуации?



Спустя 38 минут, 21 секунда (11.12.2011 - 23:51) sergeiss написал(а):
Тебе надо подумать, какие установить условия и для архива, и для текущей таблицы. Чтобы выбирались не все данные, а только нужные.
Скорее всего, они у тебя по датам как-то отсортировываются? (это только моё предположение). Если да, то из этого и надо исходить.

И еще - я не понял, зачем у тебя стоит 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)
(по идексу будет быстро)

Да, кстати smile.gif Вопрос ТС - а индексы есть, они правильные? Для обеих таблиц? Я понимаю, что вопрос больше "для ламера", коим ТС не является... wink.gif Но вдруг тут проблема?

И еще для ускорения можно выбирать не все поля, т.к. данные пишутся во временную таблицу. А только одно ключевое поле, какой-нибудь АйДи, например. Это должно быть сделано быстрее. И уже затем делать выборку из таблиц со всеми нужными полями, где этот содержится АйДи из полученного списка.

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

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