【问题标题】:Is it better to have PHP or MySQL do the heavy lifting?让 PHP 或 MySQL 完成繁重的工作会更好吗?
【发布时间】:2011-12-22 04:08:59
【问题描述】:

我一直在用 PHP 为我的网站构建这个自定义搜索功能,它根据最终用户提供的选项和输入逐步构建 MySQL 查询。它在我的本地服务器上完美运行,但是当我将它上传到生产站点时,它运行速度非常慢。我对 PHP 和 MySQL 编程比较陌生,所以我对一般情况和未来的项目都很好奇:

在运行搜索查询时,最好有一个复杂、精确的 MySQL 查询来过滤数据并返回结果供 PHP 显示,还是运行一个简单的 MySQL 查询并从数据库中获取一堆数据并拥有PHP过滤数据然后显示结果?

【问题讨论】:

  • 在大多数情况下,尽可能多地在数据库中进行过滤是有意义的——从一个巨大的表中发送多个数据是没有意义的,只是为了让 PHP 从一个字节中丢弃除一个字节之外的所有数据一个记录中的字段。但是,YMMV。

标签: php mysql search filter


【解决方案1】:

这是一种平衡行为。以下是我的建议:

  • 使用FULLTEXT 加快字符串搜索速度。
  • 在 WHERE 子句中对字段进行排序,以便首先索引列,然后是数字,然后是日期,然后是文本字段。这将通过在廉价列之后过滤昂贵的列来减少您的负载,从而减少数据库必须执行的工作量。
  • 在处理大型数据集时避免使用 ORDER,并将此处理卸载到您的 PHP 代码中,因为这样可以避免 MySQL 在查询中的每个点对数据进行排序。
  • 索引最常用或搜索成本高的字段。
  • 当您可以轻松执行两个或多个查询时,不要使用大量的 JOIN。在某些大表上包含 10 或 20 个 JOIN 的查询可能会完全杀死您的数据库。
  • UNION 对于在同一个表上一次执行几个 SELECT 查询很有用,而不是使用 OR 执行复杂的逻辑。

一般来说,最佳查询就足够了。在某些极端情况下,使用 PHP 进行工作很有用,但数据库对于 99% 的情况应该足够快。

【讨论】:

    【解决方案2】:

    如果数据库被许多 Web 服务器访问,那么对 MySQL 服务器进行大量处理可能不是一个好主意。其次,如果您使用产生大量数据的查询,那么您的数据将需要很长时间才能传输到 Web 服务器,并且您将不得不在 php 中进行更多的处理。

    另一方面,MySQL 使用了大量的优化,因此它可以有效地获取数据。

    所以这一切都取决于你在做什么

    【讨论】:

      【解决方案3】:

      我认为您可以将其结合起来以获得最佳效果。首先,从完全匹配或非常接近的匹配中运行查询。基本上,如果有人搜索页面的确切名称,您只想返回该名称(= 而不是 LIKE)。然后,也许如果他们把第一部分做对了(LIKE 'words%')。最后,用 MySQL 做繁重的工作来构建一个更复杂的。当用户提供最好的数据时,这确保了最快的回报。

      【讨论】:

        【解决方案4】:

        在优化 Web 应用程序时,有几个变量会发挥作用。根据您所说的,允许用户选择多个选项以“构建查询”使我相信您可能正在执行一些昂贵的 MySQL 操作。您希望远离 OR,如果您需要执行任何 ORDER BY,您可以在应用程序层执行此操作,只需填充结果数组然后对数组进行排序。

        您可能还需要考虑在 MySQL 层之上添加一个缓存层,这样您就不必每次都访问数据库。

        正如 Kerrek 在他的评论中提到的,您可以分析您的应用程序以查看瓶颈所在,查看 XDebug (http://xdebug.org/) 和 KCacheGrind (http://kcachegrind.sourceforge.net/html/Home .html)

        只需几个想法即可帮助您入门。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-05
          • 2015-04-26
          • 1970-01-01
          • 2013-03-12
          • 2015-04-07
          • 2011-06-07
          • 2018-01-08
          • 2013-02-25
          相关资源
          最近更新 更多