我目前在我的网站上提供免费测试功能,每个用户都可以参加其中一项测试并查看他们的高分或其他内容。
我有一个 foreach 来检查每个测试并检查每个学生获得的最高成绩。保存已保存测试的表正在向 15,000 行数据推进。
这大概是我所拥有的:
foreach(testList as $test){
SELECT saved_grade FROM system_saved
WHERE account_id = {{account_id}}
AND test_id = {{test_id}}
Order By saved_grade DESC
LIMIT 0, 1
}
它要求每次测试都必须扫描整个表格才能找到最高等级。
- 是否有更好的方法来为用户获得最高评分?
- 对表建立索引会有所帮助吗(我不太明白这个+ 每天都会放入新数据,我不确定索引是否有效 相关)
- 您还能想到其他什么方法来帮助运行得更快吗? (它 目前加载大约需要 20 秒)
最佳答案
您无需单独选择每个测试。假设 account_id 对于每个进行测试的人来说都是唯一的,并且 saving_grade 不是一个字符串,您应该能够执行此操作
SELECT MAX(saved_grade)
FROM system_saved
WHERE account_id = {{account_id}}
AND test_id = {{test_id}}
关于php - 多次从相当大的表中提取数据会很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20058633/