Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Нормально ли это? Время выполнения запроса. Если нет, подскажите пожалуйста
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Нормально ли это? Время выполнения запроса. Если нет, подскажите пожалуйста

Страниц (1): [1]
 

1. Klinch - 04 Ноября, 2015 - 10:48:50 - перейти к сообщению
Доброго времени суток!

В БД MySQL есть две таблицы:
accounts (где хранятся аккаунты и данные о балансе этих аккаунтов)
deposits (где хранятся данные о платежах аккаунтов)

Каждые сутки необходимо прибавлять к балансу аккаунтов определенную сумму (lastpay), которая хранится в таблице deposits.
У одного аккаунта может быть несколько депозитов.
Суммы депозитов разные.

Я делаю это запросом:
CODE (SQL):
скопировать код в буфер обмена
  1. UPDATE `accounts` SET `balance`=`balance`+(SELECT coalesce(SUM(`lastpay`),0) FROM `deposits` WHERE `userid`=`accounts`.`id` AND `status`='0')


Всё выполняется верно, но долго. В базе 60000 аккаунтов и 15000 депозитов. Операция занимает от 8 до 10 минут. Нормальное ли это время? Если нет, можно ли как-то оптимизировать?

Я пока учусь и еще не разобрался во всех тонкостях настройки MySQL. Быть может, мне поможет создание каких-то индексов? Сейчас в таблицах accounts и deposits есть по одному PRIMARY индексу (поле `id` с параметром AUTO_INCREMENT)

Буду очень благодарен вашим подсказкам! Спасибо!

-------------------------

(Добавление)
Разобрался.

Добавил индекс "INDEX" в таблице `deposits` для столбца `userid`
Время выполнения операции сократилось с ~600 секунд до 2-3 секунд Улыбка

 

Powered by ExBB FM 1.0 RC1