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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Нормально ли это? Время выполнения запроса. Если нет, подскажите пожалуйста

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Как можно сократить время выполнения запроса
Klinch
Отправлено: 04 Ноября, 2015 - 10:48:50
Post Id


Частый гость


Покинул форум
Сообщений всего: 214
Дата рег-ции: Июль 2012  


Помог: 0 раз(а)




Доброго времени суток!

В БД 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 секунд Улыбка

(Отредактировано автором: 04 Ноября, 2015 - 12:15:10)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB