优化查询/调用功能

时间:2017-07-12 13:27:55

标签: php optimization foreach query-optimization

我从数据库获取用户并将其作为数组返回。查询返回22000个用户,这是正确的,现在我正在尝试保存这些用户信息CSV文件,但在此之前我必须检查每个用户的额外功能,例如应用机会,因此检查每个用户,从数组中获取每个单独的 ID 并将其传递给另一个函数需要花费很多时间,而且我还需要检查其他9个函数。什么是最好和最优化的方法来做到这一点。请参阅以下代码

$sql = "SELECT id, first_name,last_name,position_id,user_company,role,last_login_date,
sf_id,user_email,login_count,user_registered FROM er_users";
$query = $this->db->query($sql);
$query = $query->result_array();

foreach ($query as $key => $q) {
   $a_opps = vt_applied_opps((object)$q);
   $s_opps = vt_suggested_opps((object)$q);
   $i_requests_e = vt_interview_request((object)$q);
   $i_requests_c = vt_company_interview_request((object)$q);

   $i_to_apply = get_invitations_count($q["id"]);
   $councils = vt_ac_count((object)$q);
   $cbe = vt_cbe_credits((object)$q);
   $forum = vt_forums((object)$q);
   $bio = vt_is_bio((object)$q);
   $resume = vt_is_resume((object)$q);

   $q["a_opps"] = $a_opps;
   $q["s_opps"] = $s_opps;
   $q["i_requests_e"] = $i_requests_e;
   $q["i_requests_c"] = $i_requests_c;

   $q["i_to_apply"] = $i_to_apply;
   $q["councils"] = $councils;
   $q["cbe"] = $cbe;
   $q["forum"] = $forum;
   $q["bio"] = $bio;
   $q["resume"] = $resume;
   $query[$key] = $q;
}

这些是函数,它们的结果存储在变量中,然后这些变量被用在数组中。请帮我优化这个方法。由于有22K记录,所以foreach循环运行22K次,内部函数也是22K次,请帮我优化这种方式。

1 个答案:

答案 0 :(得分:0)

  

$ sql =“SELECT id,   名字,姓氏,position_id,user_company,角色,last_login_date,   sf_id,user_email,login_count,user_registered FROM er_users“;   如果您只需要id,则从SELECT子句中删除剩余的表字段。

其次,

  

$ a_opps = vt_applied_opps((object)$ q); $ s_opps =   vt_suggested_opps((对象)$ Q); $ i_requests_e =   vt_interview_request((对象)$ Q); $ i_requests_c =   vt_company_interview_request((对象)$ Q);

     

$ i_to_apply = get_invitations_count($ q [“id”]); $ councils =   vt_ac_count((对象)$ Q); $ cbe = vt_cbe_credits((object)$ q);
  $ forum = vt_forums((object)$ q); $ bio = vt_is_bio((object)$ q);
  $ resume = vt_is_resume((object)$ q);

如果这些函数只从数据库中获取适当的结果,那么可以使用上面的SQL加入这些表,并忽略函数调用。

这些可能会有所帮助。

同时检查Table.field索引,如果您使用的是WHERE子句中的字段,并且这些字段没有索引,那么请为这些字段添加索引以快速生成SELECT SQL。