我有一个看起来像这样的函数:
//iteration over scales
foreach ($surveyScales as $scale)
{
$surveyItems = $scale->findDependentRowset('SurveyItems');
//nested iteration over items in scale
foreach ($surveyItems as $item)
{
//retrieve a single value from a result table and do some stuff
//depending on certain params from $item / $scale
}
}
问题:是对内部 foreach 中的每个值执行数据库查询更好,还是将所有结果值提取到数组中并从那里获取值更好?
最佳答案
返回 12 条数据的一个查询比返回 1 条数据的 12 个查询快 12 倍。
哦,永远不要把 SQL 放在循环中,它总是会导致灾难。
根据您的应用程序的工作方式,可能会为每个查询打开一个新连接,这尤其糟糕,因为每个数据库服务器对连接数都有限制。然后还要意识到每个用户都会发生这种情况,因此 5 个用户有 50 个查询,并且在任何给定时刻你已经有 250 个查询。但是,即使所有查询确实只共享 1 个连接,您也会对数据库服务器造成 X 倍的负担,使其他所有内容、每个页面的速度都变慢,因为用户占用了该页面上的数据库服务器,而每个人都必须共享。
我过去曾看到整个应用程序因这 1 个设计缺陷而失败,只是不要这样做。
关于PHP - 每次迭代查询单个值或在开始时获取所有值并从数组中检索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/356778/