У меня есть приложение, в котором пользователи начинают принимать тесты, а иногда пользователи забывают закончить/отправить свои тесты. Администраторы запросили кнопку, которую они могли бы щелкнуть, которая проходит через систему, находит все незавершенные экзамены и оценивает их.Оптимизация большого количества запросов обновления
Этот процесс выполняется с помощью одного оператора select для загрузки всех подвергнутых экзамену экзаменов. Затем процесс in-memory определяет оценку каждого пользователя. Проблема в том, что обновление базы данных с учетом каждого пользователя происходит очень медленно. Запросы обновления занимают несколько минут, и запускаются сотни или тысячи операторов обновления (в зависимости от того, сколько незапрашиваемых экзаменов ждут обработки). Мой сервер базы данных использует MySQL.
Есть ли хороший способ объединить эти запросы обновления в одно обновление? Каждый пользователь получает уникальный баллы для своего экзамена. Я нашел несколько ссылок о том, как это сделать, но мои коллеги-разработчики говорят мне, что они недостижимы и слишком сложны. Большинство из них имеют дело с добавлением операторов case к запросу обновления (по одному для каждого засчитанного экзамена). Вот пример одного предложения:
http://dashasalo.com/2009/06/18/update-multiple-rows-with-different-values/
Есть ли какие-либо другие идеи, что я пропускаю, которые могли бы повысить эффективность этого процесса? Благодаря!
Примечание: У меня есть правильная настройка индексов в этой таблице, и каждый отдельный запрос занимает от 0,2 до 0,5 секунды. Я также предложил ночную работу cron или автоматическую очистку. Администраторы отклонили это, заявив, что они хотят контролировать, когда происходит процесс очистки, и для них не может быть применен метод cron/automatic/nightly.
Интересная идея. Я попробую. Он должен хорошо работать для экзаменов, у которых есть несколько вопросов (менее 10). – David