| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > MySQL > оптимизация времени выполнения запроса |
| Автор: lonli 13.3.2008, 12:25 | ||
| В базе есть 2 таблицы aa (25к строк) и bb (15к строк) Запрос
У меня нехорошее ощущение, что оптимизировать его нельзя, но вдруг... База работает для сайта на PHP, может имеет смысл перенести обработку туда, а там вставить прерывания, или ещё как поколдовать. Врамя работы возрастёт в десятки раз, но хотябы проц будет относительно свободен. Планирую переносить сайт на частный хостинг, не пошлют ли меня там с такой нагрузкой? |
| Автор: skyboy 13.3.2008, 17:15 | ||||||
| предлагаю сделать в три этапа: 1. создать temporary table с двумя полями: idB и SUM_OF_F. Индекс по idB
Если операция разовая - можно и temporary таблицу создать. 2. выполнить
забив во временную таблицу готовые уже пары IDB + sum(f) 3. провести обноывления на основе временной таблицы:
впрочем, это для того случая, если тормоза по причине подзапроса с группировкой. т.е. если причина - в пересчете одних и тех же значений длоя разных строк. если проблема в индексе в таблице `bb` на поле `f`, то тут никак не помочь(разве что попробовать перед вставкой удалить индекс, а после вставки - восстановить: по времени будет, пожалуй, дольше, но нагрузку можно будет разделить на два разных действия и разнести во времени: сначала только вставка и много позже - переиндексация) Добавлено через 1 минуту и 5 секунд лучше бы указал, в каких отношениях `aa` и `bb` по `aa`.`idB` = `bb`.`id`: "многие-ко-одному" или "один-к-одному" Добавлено через 1 минуту и 36 секунд возможно, стОит задуматься о переработке структуры базы. |
| Автор: lonli 13.3.2008, 19:30 |
| Меньше секунды занимает. Спасибо. Один-ко-многим. Я думал это понятно было. |
| Автор: skyboy 14.3.2008, 00:39 |
почему же? вполне могла быть необязательная связь "один-к-одному" и суммированием человек мог проверять наличие или отсутствие связи рад. учитывая мое незнание структуры, практически наугад стрелял. и попал Добавлено через 46 секунд если вопрос решен, пожалуйста, пометь его решенным(в правом верхнем углу над первым твоим постом в теме ссылка есть) |