Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让PHP或MySQL来完成繁重的工作更好吗?_Php_Mysql_Search_Filter - Fatal编程技术网

让PHP或MySQL来完成繁重的工作更好吗?

让PHP或MySQL来完成繁重的工作更好吗?,php,mysql,search,filter,Php,Mysql,Search,Filter,我一直在用PHP为我的站点构建这个定制搜索功能,它根据最终用户提供的选项和输入增量构建MySQL查询。它在我的本地服务器上运行得非常好,但是当我将它上传到生产站点时,它运行得非常慢。我对使用PHP和MySQL编程比较陌生,因此我对一般情况和未来项目都很好奇: 在运行搜索查询时,最好使用一个复杂、精确的MySQL查询来过滤数据并返回结果供PHP显示,还是运行一个简单的MySQL查询并从数据库中获取一组数据,然后让PHP过滤数据并显示结果?我认为您可以将其组合起来以获得最佳结果。首先也是最重要的是,

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


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

我认为您可以将其组合起来以获得最佳结果。首先也是最重要的是,运行精确匹配或真正接近匹配的查询。基本上,如果有人搜索某个页面的确切名称,您只需返回(=而不是LIKE)。然后,如果他们第一部分做对了(比如“单词%”)。最后,用MySQL来构建一个更复杂的数据库。当用户提供最佳数据时,这确保了最快的回报。

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

您可能还想考虑添加一个位于MySQL层之上的缓存层,这样您就不必每次都要访问数据库。p> 正如Kerrek在他的评论中提到的,您可以分析应用程序以查看瓶颈所在,请查看XDebug(http://xdebug.org/)和KCacheGrind(http://kcachegrind.sourceforge.net/html/Home.html)


只要一些想法就可以开始了。

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

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

一般来说,最佳查询应该足够了。在某些情况下,使用PHP进行工作是很有用的,但是数据库应该足够快,可以处理99%的情况。

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

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


因此,这完全取决于您在数据库中所做的工作

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