
![]() |
Здравствуйте Гость ( Вход | Регистрация ) |
|
|
|
![]() ![]() ![]() |
![]() |
|||||
![]() ![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Эксперт ![]() Сообщений: 3599 Пользователь №: 16703 На форуме: Карма: 76 ![]() |
Есть 2-ве таблицы, примерно схожи по своей структуре и данным (1 таблица живые данные, 2-ая архив). Теперь пришлось сделать поиск/постраничку и управление ими соответственно.
Суть вопроса сводится к тому, как оптимизировать запрос вида SELECT * FROM (SELECT ...... FROM table1 UNION ALL SELECT ...... FROM table2) Запрос исполняется крайне медленно, дураку понятно что делается полная выборка данных из таблиц, а затем они режутся LIMIT-ом, что можно предпринять в такой ситуации? Спустя 38 минут, 21 секунда (11.12.2011 - 23:51) sergeiss написал(а): Тебе надо подумать, какие установить условия и для архива, и для текущей таблицы. Чтобы выбирались не все данные, а только нужные. Скорее всего, они у тебя по датам как-то отсортировываются? (это только моё предположение). Если да, то из этого и надо исходить. И еще - я не понял, зачем у тебя стоит SELECT * FROM (... )? То есть, зачем делать повторную выборку из только что полученных данных - на это же ведь тоже надо время. Спустя 13 минут, 28 секунд (12.12.2011 - 00:05) caballero написал(а):
лимит на общую выборку по теме - можно попробовать выбрать юнионом сначала значение ключевых полей (по идексу будет бытро) затем после лимита сделать уже полноценную выборку с условием IN для каждой таблицы в юнионе Спустя 21 минута, 47 секунд (12.12.2011 - 00:26) sergeiss написал(а):
Да, кстати ![]() ![]() И еще для ускорения можно выбирать не все поля, т.к. данные пишутся во временную таблицу. А только одно ключевое поле, какой-нибудь АйДи, например. Это должно быть сделано быстрее. И уже затем делать выборку из таблиц со всеми нужными полями, где этот содержится АйДи из полученного списка. Спустя 8 часов, 50 минут, 4 секунды (12.12.2011 - 09:16) Семён написал(а): Индексы стоят))) Нашёл причину. ![]() Запрос тормозил изза того, что сама база располагалась на файловой системе FAT32 с свободным местом 250 мб. (флешка). И мускулу не хватала места для tmp операций. (на 240 мб, он заплакал что таблицы вообще нада восстанавливать) |
||||
![]() |
![]() ![]() ![]() |