【问题标题】:PHP/mysql - Queries vs arrays?PHP/mysql - 查询与数组?
【发布时间】:2011-11-26 19:06:04
【问题描述】:

我正在编写一个相当简单的 web 应用程序,它从 mysql 数据库中的 3 个表中提取数据。因为我不需要大量高级过滤,所以理论上构建并在大型多维数组中工作似乎更快,而不是尽可能地执行 mysql 查询。

理论上,我可以只从每个表中查询一个并用结果构建大型数组,基本上不需要再次查询该表。这是一个好习惯,还是在需要时只查询数据更好?或者是否存在某种平衡,如果有,是什么?

【问题讨论】:

  • 除非您将其存储在会话中,否则您必须为每个请求重建您的阵列。那么数据是只读的,它会改变吗?
  • 我当然需要查询来向数据库添加新数据并编辑记录,但是当我只需要显示数据时,我正在考虑数组工作。您通过会话提出了一个很好的观点,因为目前我正在每个页面加载时在头文件中构建数组。
  • “良好实践”在您知道自己需要它之前不会进行优化。话虽如此,当您在表上定义了适当的索引时,数据库查询通常会非常快。

标签: php mysql theory


【解决方案1】:

PHP 数组可以非常快,但这取决于这些表有多大,当数字变大时,MySQL 会更快,因为有了正确的索引,它就不必扫描所有数据,但是只需选择您需要的。

我不建议你尝试你的建议,MySQL 有一个查询缓存,所以重复查询甚至不会撞到磁盘,所以在某种程度上,你正在考虑的优化已经完成。

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

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

如果您最终决定应用优化,分析性能,您可能会对意想不到的结果感到惊讶。

【讨论】:

  • 哇哦。我不知道 MYSQL 查询缓存。这确实极大地改变了我的想法。
  • @JakeLowen ,如果您使用的是PDO 或 MySQLi(无论如何您都应该使用),那么通过准备好的语句,您可以使这一切工作得更好。之后,如果应用变得非常流行,您可以稍后在 DB 和 PHP 之间创建缓存。
【解决方案2】:

这取决于...

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

我认为 MySQL 查询缓存可能是一个很好的解决方案。如果你已经过滤,你可以创建视图。

【讨论】:

    【解决方案3】:

    如果您可以通过一个查询来完成 - 去吧!在你的情况下,我会说这是一个很好的做法。您还可以考虑将数据保存在 CSV 或类似文件中,这样可以提高性能。

    【讨论】:

      【解决方案4】:

      我完全同意 chris 关于优化的看法:LAMP 堆栈对于 99% 的 Web 应用程序来说是一个很好的解决方案,无需任何优化。仅当您确实遇到性能问题时才进行优化。

      对你的 php + 数据库的心智模型再想一想:你没有考虑到将大量数据从数据库读取到 php 也需要时间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-24
        • 2015-04-30
        • 1970-01-01
        • 2011-03-25
        • 2011-02-07
        • 2013-04-10
        • 2013-06-11
        • 2013-12-15
        相关资源
        最近更新 更多