Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> оптимизация времени выполнения запроса, запрос выполняется 18 мин. %) 
V
    Опции темы
lonli
Дата 13.3.2008, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 31.3.2007
Где: Москва

Репутация: нет
Всего: нет



В базе есть 2 таблицы aa (25к строк) и bb (15к строк)

Запрос 
Код

UPDATE `bb` b SET `f`=(SELECT SUM(`f`) FROM `aa` a WHERE a.idB=b.id) 
 на процессоре Pentium 4 (2.4 GHz) выполняется 18 мин.

У меня нехорошее ощущение, что оптимизировать его нельзя, но вдруг...

База работает для сайта на PHP, может имеет смысл перенести обработку туда, а там вставить прерывания, или ещё как поколдовать. Врамя работы возрастёт в десятки раз, но хотябы проц будет относительно свободен.
Планирую переносить сайт на частный хостинг, не пошлют ли меня там с такой нагрузкой?
PM MAIL ICQ   Вверх
skyboy
Дата 13.3.2008, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



предлагаю сделать в три этапа:
1. создать temporary table с двумя полями: idB и SUM_OF_F. Индекс по idB
Код

CREATE TABLE /* TEMPORARY*/ `my_temporary` (
`idB` INT,
 `sum_of_f` INT,
INDEX(`idB`)
) ENGINE=MEMORY;

Если операция разовая - можно и temporary таблицу создать.
2. выполнить
Код

INSERT INTO `my_temporary`(`idB`,`sum_of_f`) 
SELECT `idB`,sum(`f`)
FROM `aa`
GROUP BY `idB`

забив во временную таблицу готовые уже пары IDB + sum(f)
3. провести обноывления на основе временной таблицы:
Код

UPDATE `bb`,`my_temporary` SET `bb`.`f` = `my_temporary`.`sum_of_f`
WHERE `bb`.`id` = `my_temporary`.`idB`

впрочем, это для того случая, если тормоза по причине подзапроса с группировкой. т.е. если причина - в пересчете одних и тех же значений длоя разных строк. если проблема в индексе в таблице `bb` на поле `f`, то тут никак не помочь(разве что попробовать перед вставкой удалить индекс, а после вставки - восстановить: по времени будет, пожалуй, дольше, но нагрузку можно будет разделить на два разных действия и разнести во времени: сначала только вставка и много позже - переиндексация)

Добавлено через 1 минуту и 5 секунд
Цитата(lonli @  13.3.2008,  11:25 Найти цитируемый пост)
В базе есть 2 таблицы aa (25к строк) и bb (15к строк)

лучше бы указал, в каких отношениях `aa` и `bb` по `aa`.`idB` = `bb`.`id`: "многие-ко-одному" или "один-к-одному"

Добавлено через 1 минуту и 36 секунд
возможно, стОит задуматься о переработке структуры базы.
PM MAIL   Вверх
lonli
Дата 13.3.2008, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 31.3.2007
Где: Москва

Репутация: нет
Всего: нет



 smile 

Меньше секунды занимает. Спасибо.

Один-ко-многим. Я думал это понятно было.
PM MAIL ICQ   Вверх
skyboy
Дата 14.3.2008, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Цитата(lonli @  13.3.2008,  18:30 Найти цитируемый пост)
Один-ко-многим. Я думал это понятно было. 

почему же? вполне могла быть необязательная связь "один-к-одному" и суммированием человек мог проверять наличие или отсутствие связи smile не хочу обидеть подозрением в неадекватности, но я и не такие закавыки встречал. особенно в стремлении "сделать все одним запросом"  smile 
Цитата(lonli @  13.3.2008,  18:30 Найти цитируемый пост)
Меньше секунды занимает.

рад. учитывая мое незнание структуры, практически наугад стрелял. и попал smile

Добавлено через 46 секунд
если вопрос решен, пожалуйста, пометь его решенным(в правом верхнем углу над первым твоим постом в теме ссылка есть)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0954 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.