让PHP或MySQL做繁重的工作更好吗?

时间:2011-11-04 16:07:01

标签: php mysql search filter

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

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

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

另一方面,MySQL使用大量优化,以便有效地获取数据。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

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

让你开始的一些想法。