Php 对同一数据集使用多个循环(非嵌套)/单个循环的性能事实

Php 对同一数据集使用多个循环(非嵌套)/单个循环的性能事实,php,mysql,performance,Php,Mysql,Performance,要将数据导出为pdf,我需要从数据库中查询数据集,然后在其中循环以管理索引,然后导出为pdf。查询时,可以使用连接和其他机制以不同的方式操作数据集。混淆之处在于,根据数据集的结构,它可以在单个循环中完成,也可以在多个循环中完成(不是嵌套的)。这两种方式的性能影响是什么 例如:数据集包含“组织”及其“查询”。“查询”有不同的类型。在这种情况下,我可以查询以检索整个数据集,并使用一个循环遍历它,或者检索数据集作为部分,然后使用多个循环遍历它 这两个场景的性能事实是什么。 提前感谢通过对每个数据集只查

要将数据导出为pdf,我需要从数据库中查询数据集,然后在其中循环以管理索引,然后导出为pdf。查询时,可以使用连接和其他机制以不同的方式操作数据集。混淆之处在于,根据数据集的结构,它可以在单个循环中完成,也可以在多个循环中完成(不是嵌套的)。这两种方式的性能影响是什么

例如:数据集包含“组织”及其“查询”。“查询”有不同的类型。在这种情况下,我可以查询以检索整个数据集,并使用一个循环遍历它,或者检索数据集作为部分,然后使用多个循环遍历它

这两个场景的性能事实是什么。
提前感谢

通过对每个数据集只查询一次,您可以绕过向数据库发送额外查询时可能出现的额外延迟(如mysql执行其任务所需的时间,如果数据库位于本地服务器上,则额外的网络延迟非常低)

每次查询数据库时,查询本身都必须

  • 发送到数据库
  • 由数据库解析
  • 分析和优化
  • 执行
并且必须返回结果集。因此,从性能角度来看,减少对数据库的额外运行是一个好主意

编辑:mysql的工作原理

编辑2:

我想这取决于你想对每个数组做什么。我可能会分别对待他们,因为他们处理的事情都不一样

在这个场景中,性能不应该是重要的因素,因为在包含9k个元素的数组上迭代一次或在包含3k个元素的数组上分别迭代3次都无关紧要

你应该把重点放在通过代码进行清晰的沟通上。分离实体的责任

让我们以您的示例为例,假设您要发送电子邮件的3个数组中的每个元素,并且所需的所有数据(从、到、主题等)都已在您的数组中。假设是,三个数组中的数据需要进行不同的处理

$tableAR = array('Incident' => $incidentAR,
                 'Prevention' => $preventionAR,
                 'Undefined' => $undefinedAR);
foreach($tableAR['Incident'] as $incident){
    sendIncidentmail($incident);
}
// same for prevention and any other array, write your code in a way some random programmer can understand what is happening
当然,您可以创建一个函数来查看元素,检查类型,然后决定发送哪种邮件,但是在调用函数的地方,它的可读性要差得多,而且函数本身必须更大才能决定它与给定数据的关系

$tableAR = array('Incident' => $incidentAR,
                 'Prevention' => $preventionAR,
                 'Undefined' => $undefinedAR);
$completeArray = array_merge($tableAR['Incident'], $tableAR['Prevention'], $tableAR['Undefined']);
foreach($completeArray as $element){
    sendMail($incident);
}

这很有帮助。但我的场景不是查询不同的时间。数据集是一次性检索的。混淆之处在于通过检索的数据进行循环以进行管理。是对整个数据集使用单循环,还是对数据集中的部分使用多个循环。谢谢@Philipper您能给出一个更具体的示例吗?$tableAR=array('Incident'=>$incidentAR,'Prevention'=>$preventionAR,'Undefined'=>$undefinedAR);假设$incidentAR、$preventionAR和$undefinedAR是数据集中的数组。我查询的方式产生了这种类型的数据集。因此,我可以通过这些子数组中的每个子数组进行循环,每个子数组都有单独的循环。通过同样的方法,我可以查询数据集作为一个整体,然后使用一个循环来遍历它。这两种方法之间存在混淆。什么更准确,或者两者相同?非常感谢您的支持@PhilippOk,我编辑了答案,但这纯粹是基于意见。人们可以分析哪个更快,大循环还是一些小循环,但性能不会起到那么大的作用。