PHP/MySQL - 查询 vs 数组?

5
我正在编写一个相当简单的Web应用程序,从MySQL数据库中提取三个表的数据。因为我不需要大量的高级过滤,所以在可能的情况下构建并在大型多维数组中工作似乎理论上更快,而不是每次都执行MySQL查询。
理论上,我可以只从每个表中获取一次查询结果,并使用这些结果构建大型数组,从而基本上不需要再次查询该表。这是一个好的实践吗?还是在需要数据时仅查询数据更好?或者存在某种平衡吗?如果有,是什么?

除非您将其存储在会话中,否则每次请求都必须重新构建数组。那么数据呢?它是只读的吗?它会改变吗? - stivlo
我需要查询来添加新数据到数据库并编辑记录,当然,当我只需要显示数据时,我会考虑使用数组。你提出了一个很好的观点,关于会话,因为目前我是在每个页面加载时在头文件中构建数组。 - Jake Lowen
“好的实践”是在确定需要优化之前不进行优化。话虽如此,当您在表上定义了适当的索引时,数据库查询通常非常快速。 - goat
4个回答

3

PHP数组可以非常快,但这取决于表的大小。当数字变得巨大时,MySQL会更快,因为使用正确的索引,它不必扫描所有数据,而只需选择所需的数据。

我不建议您尝试您提出的方法,因为MySQL具有查询缓存,因此重复查询甚至不会影响磁盘,因此,在某种程度上,您正在考虑的优化已经完成。

最后,正如Chris所说,当不需要时,永远不要考虑优化。

关于良好的实践,良好的实践是编写最简单(易于阅读)的代码来完成工作。

如果最终决定应用优化,请对性能进行分析,您可能会惊讶于意外的结果。


哦,哇。我不知道MYSQL查询缓存。这确实显著改变了我的思考方式。 - Jake Lowen
@JakeLowen,如果你正在使用PDO或MySQLi(无论如何都应该使用),那么通过预处理语句,你可以让它们更好地协同工作。而且,如果应用程序变得非常流行,你可以在DB和PHP之间创建缓存。 - tereško

1

这要看情况而定...

使用微秒函数尝试每个解决方案,你会看到结果。

我认为MySQL查询缓存可能是一个不错的解决方案。如果你有筛选条件,可以创建视图。


0
如果您能通过单个查询完成它 - 就去做吧!在您的情况下,我认为这是一个好习惯。您还可以考虑将数据存储在 CSV 或类似文件中,这将使您获得更好的性能。

0

关于优化,我完全同意Chris的观点:LAMP堆栈是99%的Web应用程序的良好解决方案,无需进行任何优化。仅在真正遇到性能问题时才进行优化。

关于您对PHP +数据库的思维模型,还有一个想法:您没有考虑从数据库读取大量数据到PHP也需要时间。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接