Доброго времени суток!
В БД MySQL есть две таблицы:
accounts (где хранятся аккаунты и данные о балансе этих аккаунтов)
deposits (где хранятся данные о платежах аккаунтов)
Каждые сутки необходимо прибавлять к балансу аккаунтов определенную сумму (lastpay), которая хранится в таблице deposits.
У одного аккаунта может быть несколько депозитов.
Суммы депозитов разные.
Я делаю это запросом:
CODE ( SQL):
скопировать код в буфер обмена
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 секунд (Отредактировано автором: 04 Ноября, 2015 - 12:15:10)
|