为什么我的查询在循环中非常慢

时间:2018-07-23 16:30:37

标签: php mysql codeigniter

我对php的mysql没有足够的经验,但是我试图开发学校成绩单,试图查询学生的考试,科目和成绩。在这种情况下,我有三个循环。第一个循环是针对学生的,我用它来获取学生的ID,第二个循环是针对考试的,我用它来获取考试的ID,最后一个循环是针对学科的,我用它来获取学科的ID,我需要所有此ID,以便获得每个学生每门课程每门考试的分数。波纹管是循环的;

//: C10:Oof.cpp
// (c) Bruce Eckel 2000
// Second file

#include <fstream>

extern std::ofstream out;


class Oof
{
public:
   Oof()
   {
      out << "ouch"; 
   }
} oof;


int main()
{
} ///:~

我不知道真正的问题是什么,但是这个循环要花很长时间,要返回特定班级的所有学生需要26秒,班级只有23名学生,四个考试和五个科目,因此我想知道,如果学生人数超过这些,那将会是什么?请问任何想法,为什么它会像这样,除了循环之外,我可以使用任何想法。

2 个答案:

答案 0 :(得分:0)

您的代码逻辑中存在两个主要问题:

  1. 您要选择效率极低的SELECT * FROM的每个字段,请尝试仅选择要使用的字段
  2. 您正在第3个嵌套循环中进行查询,因此,您无需对每个学生,每次考试,每个科目进行1个查询(例如23 * 4 * 5 = 460个查询)

解决方案是重构代码,数据库,并通过简单查询获取该信息,然后遍历返回的记录并处理信息服务器端。

答案 1 :(得分:0)

与数据库通信非常慢。想象一下您正在做饭,而您的数据库查询就是去杂货店的旅行。您不会为每种单一成分出差-您会列出所有需要的成分,这样您就可以进行单一出差。

因此,您想运行一个查询以获取此页面上所需的所有记录。为了简化操作,您可以将“ WHERE”子句变成单个查询的“ ORDER BY”:

SELECT * FROM mark ORDER BY studentID, subjectID, examID;

然后,您可以在该结果集的单个循环中一个接一个地处理每个学生分数的输出或任何处理。