PHP - 每次迭代查询单个值或在开始时获取所有值并从数组中检索?

标签 php database performance

我有一个看起来像这样的函数:

//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/

相关文章:

c# - 为什么 Thread.Sleep() 占用大量 CPU?

java - 来自 InputStream 的编年史字节

php - 存储当前日期时,应该在 web 应用程序中设置还是在数据库中设置?

mysql - 从一个表中获取记录,其中 id 在 mysql json 中的第二个表数组中

php - 照亮\数据库\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1064

vba - 微软 Access : how to compact current database in VBA

mysql - 规范化mysql数据库

performance - ES:使用全局聚合的准联接查询与父子/嵌套查询相比如何?

php - 将字符串拆分为字典单词

php - 添加 .htaccess 文件后表单提交停止工作