php - 多次从相当大的表中提取数据会很慢

标签 php mysql database foreach

我目前在我的网站上提供免费测试功能,每个用户都可以参加其中一项测试并查看他们的高分或其他内容。

我有一个 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/

相关文章:

sql - 数据库设计——它是否尊重 3rd NF?

php - 如何执行mysql命令DELIMITER

php - Laravel 5 - 存储在数据库中

从 5.7 升级后的 MySQL 8 SELECT 语句语法问题

mysql - 多对多关系与级联或设置空删除?

mysql - Laravel 5.4 - 数据库查询帮助

php - 如何使用 imap_ping 在收到新电子邮件时收到通知

php - 如何使用 ffmpeg/php 在按钮单击时将 mp4 文件转换为 mp3?

asp.net-mvc - ASP.NET中MVC应用程序的结构应该是什么?

database - 用于登录的 Wordpress 共享用户数据库