Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查询/调用函数的优化_Php_Optimization_Foreach_Query Optimization - Fatal编程技术网

Php 查询/调用函数的优化

Php 查询/调用函数的优化,php,optimization,foreach,query-optimization,Php,Optimization,Foreach,Query Optimization,我从数据库中获取用户并将其作为数组返回。查询返回22000个用户,这是正确的,现在我正在尝试保存这些用户信息CSV文件,但在此之前,我必须检查每个用户的额外功能,例如应用机会,因此检查每个用户,从数组中获取每个ID,并将其传递给其他函数需要很多时间,我还有9个其他功能需要检查。实现这一点的最佳优化方法是什么。请参阅下面的代码 $sql = "SELECT id, first_name,last_name,position_id,user_company,role,last_login_date,

我从数据库中获取用户并将其作为数组返回。查询返回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次,请帮助我优化这种方式

$sql=“选择id, 姓名、姓氏、职位id、用户公司、角色、上次登录日期、, sf_id、用户_电子邮件、登录计数、从er_用户注册的用户”; 若您只需要id,那个么从SELECT子句中删除剩余的表字段

第二,

$a_opps=vt_applicated_opps((对象)$q)$s_opps= vt_建议的opps((对象)$q)$我请求= vt_面试请求((对象)$q)$我请求= vt公司面试申请((对象)$q)

$i_to_apply=获取邀请数量($q[“id”])$理事会= vt_ac_计数((对象)$q)$cbe=vt_cbe_学分((对象)$q)
$forum=vt_论坛((对象)$q)$bio=vt_is_bio((对象)$q)
$resume=vt_是_resume((对象)$q)

如果这些函数都只从数据库中获取适当的结果,那么您可以使用上述SQL连接这些表,并忽略函数调用

这些可能真的有帮助

还要检查Table.field索引,如果您使用的是WHERE子句中的字段,而这些字段没有索引,那么请为这些字段添加索引并生成fast SELECT SQL

$sql=“选择id, 姓名、姓氏、职位id、用户公司、角色、上次登录日期、, sf_id、用户_电子邮件、登录计数、从er_用户注册的用户”; 若您只需要id,那个么从SELECT子句中删除剩余的表字段

第二,

$a_opps=vt_applicated_opps((对象)$q)$s_opps= vt_建议的opps((对象)$q)$我请求= vt_面试请求((对象)$q)$我请求= vt公司面试申请((对象)$q)

$i_to_apply=获取邀请数量($q[“id”])$理事会= vt_ac_计数((对象)$q)$cbe=vt_cbe_学分((对象)$q)
$forum=vt_论坛((对象)$q)$bio=vt_is_bio((对象)$q)
$resume=vt_是_resume((对象)$q)

如果这些函数都只从数据库中获取适当的结果,那么您可以使用上述SQL连接这些表,并忽略函数调用

这些可能真的有帮助


还要检查Table.field indexing,如果您使用的是WHERE子句中的字段,而这些字段没有索引,请为这些字段添加索引,使之成为fast SELECT SQL。

foreach中的函数是否包含查询?最好的方法是通过一个SQL查询获取所有其他数据。例如,为每个用户调用vt_applicated_opps((object)$q),进行单个sql查询,返回所有用户的数据。这些函数可以移动到数据库中吗?可能是一个存储过程。来自这些其他函数的信息是否存储在数据库中?如果是这样,为什么不使用子查询在一次传递中收集所有信息呢?foreach中的函数是否包含查询?最好的方法是通过一个sql查询获取所有附加数据。例如,为每个用户调用vt_applicated_opps((object)$q),进行单个sql查询,返回所有用户的数据。这些函数可以移动到数据库中吗?可能是一个存储过程。来自这些其他函数的信息是否存储在数据库中?如果是这样,为什么不使用子查询在一次传递中收集所有信息呢?我不能使用联接,因为数据库中的记录超过100K,所以它们将变得更慢…联接将变得慢,但如果使用索引,它将变得快。我不能使用联接,因为数据库中的记录超过100K,所以它们将变得更慢…联接将变得慢,但如果使用索引,它会变得很快。