如何解决在一个查询中获取所有数据并在PHP中进行处理,而不是针对每个数据重复进行查询
| 我提前知道我最终将需要来自某个表的一堆行,但是我不知道我将需要什么顺序。 通常,从性能和最佳实践的角度来看,以下方法是否是更好的主意: 进行单个常规查询,以返回我知道最终需要的所有行,然后使用PHP(或任何其他方式)根据需要选择每行;要么, 使用WHERE进行大量查询,仅在需要时才选择每一行。 我需要的行数大约为300-600,并且该页面每分钟加载的次数不应超过几次(尽管我想选择一种可以在较重的负载下应对的解决方案比这个)。 编辑以获得更多信息:我正在使用PostgreSQL。随着时间的推移,该表将变得非常大,可能有数千行。我可以在进行任何查询之前确定我最终将需要哪些行(如我所说,n〜500),但是我不知道我将需要这些行的顺序。 1个查询和n个PHP在数组中搜索特定值,或者每次n个查询具有不同的WHERE子句。我倾向于前者。解决方法
在可能的情况下,一次查询而不是n次查询几乎总是更快。如果您的结果集位于关联数组中,则不会在数组中为各个行建立索引。但是,如果您遍历结果数组并通过行ID键入数组元素,则对于PHP中的随机访问而言,它们将变得更快(而不是每次都需要遍历整个数组来查找所需的行)。当然,这样做将使用更多的内存来复制数组元素。
无论哪种方式,这都比每次返回数据库都要快得多,尤其是当您要访问数据库数百次时。
最好的选择是按照需要的顺序从RDBMS中提取记录,并按
ORDER BY
。那么随机访问就不是问题。
无论如何,600行听起来并不那么多。确保在适当的列上都有索引,以便优化查询,并且会没事的。
编辑当获取行时,创建一个数组索引。现在,您无需搜索数组,只需按索引即可访问它。
$rowset = array();
while ($row = pg_fetch_assoc($result)) {
// Append rows to $rowset indexed by the \'id\' column
// Use whatever column you\'ll need to be searching with PHP
$rowset[$row[\'id\']] = $row;
}
, 使用WHERE子句中的适当过滤器来构建动态SQL查询。您不应该将最坏的情况拖到导线上600行并进入内存-这不是一个好的设计。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。