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