我应该多次访问数据库还是循环访问数组?

时间:2012-11-18 20:38:36

标签: php database codeigniter optimization

哪种收集相关数据的效率最高?

假设我们有多个项目与一个类别1相关联:M。

每个项目都包含它所属的类别的ID值。我有一个所有项目的数组对象,我现在想要向该数组对象添加其类别名称而不是其ID。

例如,而不是:

project_id:1 project_title:第一个项目 project_desc:bla bla project_category_id:1

我希望它是:

project_id:1 project_title:第一个项目 project_desc:bla bla project_category:第一类

我没有遇到这个问题,我很好奇实现它的最有效方法是什么。

选项1

$projects = $this->projects_model->find_all();
$categories = $this->category_model->find_all();

foreach($projects as $project){
   foreach($categories as $category){
      if($project->category_id == $category->id){
         $project->category = $category;
      }
   }
}

选项2

$projects = $this->projects_model->find_all();

 foreach($projects as $project){
   $project->category = $this->category_model->find_by('id', $project->category_id);
 }

可能还有许多其他方法可以实现我想要的结果,并且可能会有更高效的庄园,如果是我喜欢学习的话。

2 个答案:

答案 0 :(得分:1)

  1. 你应该自己剖析一下,你会得到答案

  2. 点击数据库很昂贵。访问数组数据不是。这意味着您将希望尽可能少地访问数据库。

答案 1 :(得分:0)

假设您的find_all和find_by函数从数据库请求数据,则选项1将更可取,直到所寻求的类别与使用的类别之间的比率变低。 SQL上的顺序(即读取然后读取下一行)读取操作比目标读取操作快得多。

但最终,如果我是你,我会更少关注实际的数组循环以及更多关于如何获取数据的信息,因为这个是性能消耗的来源。