Оптимизация при работе с БД

Всем привет! Есть таблица в БД с несколькими столбцами, среди которых ид, наименование, юзер, оценка и средняя оценка. Сейчас при выставлении пользователем новой оценки наименованию я перебираю все ранее поставленные наименованию оценки (тяну из базы) и на основе этого выставляю среднюю оценку наименованию Возможно кто-то подскажет, как можно оптимизировать этот процесс? Потому как при большом количестве оценок это явно будет не оптимально. Возможно хранить еще отдельно последнюю среднюю оценку и количество оценок на данный момент, но как с этим совладать при добавлении новых оценок я в толк взять не могу. Буду признателен за подсказки и наводки. Пишу на Java использую MySQL.


Ответы (1 шт):

Автор решения: Сергей

Вы уже отчасти ответили. Я советую следующий алгоритм на базе вашей идеи:

  1. Хранить отдельно общую сумму оценок (числитель средней оценки) и количество оценок на данный момент (знаменатель средней оценки). Хранить среднюю оценку для целей пересчета смысла не вижу.
  2. При добавлении новой оценки соответственно увеличивать хранимые числитель (+новая оценка) и знаменатель (+1), рассчитывать новую оценку на их основе.

Но советую проверить натурным экспериментом, насколько это выгоднее, чем заново все пересчитывать каждый раз. Наверное, да - оптимальнее, но если и при простом пересчете нагрузка на систему будет минимальна, то надо задуматься, нужно ли это небольшое усложнение.

Примечание на всякий случай: я не работаю с БД, изучаю mySQL для ML. Но вряд ли от этого ответ неверным станет:-)

→ Ссылка