【发布时间】:2012-01-18 17:37:18
【问题描述】:
我有一个应用程序,用户开始参加测试,有时用户忘记完成/提交他们的测试。管理员请求了一个按钮,他们可以单击该按钮通过系统,找到所有未提交的考试,并对它们进行评分。
这个过程通过一个 select 语句来加载所有受影响的考试。然后,内存中的进程确定每个用户的分数。问题是用每个用户的分数更新数据库非常慢。更新查询需要几分钟,并且会运行数百或数千条更新语句(取决于有多少未提交的考试正在等待处理)。我的数据库服务器使用 MySQL。
有没有什么好方法可以将这些更新查询合并到一个更新中?每个用户都会收到一个独特的考试分数。我找到了一些有关如何执行此操作的链接,但我的开发人员同事告诉我,这些链接无法维护且过于复杂。他们中的大多数处理向更新查询添加案例语句(每个评分考试一个)。这是一个建议的示例:
http://dashasalo.com/2009/06/18/update-multiple-rows-with-different-values/
我是否还有其他想法可以提高此过程的性能?谢谢!
注意:我确实在此表上设置了适当的索引,每个单独的查询需要 0.2-0.5 秒才能完成。我还建议进行夜间 cron 作业或自动清理。管理员拒绝了这一说法,称他们希望控制何时进行清理过程,并且他们不接受任何 cron/automatic/nightly 进程。
【问题讨论】:
标签: mysql sql performance optimization query-optimization