Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Закрытая темаСоздание новой темыСоздание опроса

> Постраничка при UNION, Как рыть, куда копать, что делать
Семён  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 3599
Пользователь №: 16703
На форуме: 16 лет, 1 месяц, 21 день
Карма: 76




Есть 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 мб, он заплакал что таблицы вообще нада восстанавливать)
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Закрытая темаСоздание новой темыСоздание опроса