PHP比MySQL执行查询需要更长的时间

时间:2011-09-13 15:43:25

标签: php mysql

现在我必须先说,我不能复制字符串。这是一个普遍的问题。

我有一个带有几个连接的查询,使用mysql CLI运行时需要0.9秒。我现在正在尝试在PHP站点上运行相同的查询,这需要8秒钟。网站上有一些其他大型连接明显较慢,但这个字符串花费的时间太长了。我需要增加数据库连接的PHP缓存吗?或者这只是预料之中。

5 个答案:

答案 0 :(得分:5)

PHP对MySQL没有太大作用;它将查询字符串发送到服务器,并处理结果。这里唯一的瓶颈是它是一个绝对浩大的查询字符串,或者如果你得到很多结果 - PHP必须缓存并解析它们到一个对象(或数组,取决于哪个{ {1}}你使用)。在不知道您的查询或结果是什么的情况下,我只能猜测。


(来自评论):如果我们有30列,比如一百万行,这将需要一个年龄来解析(我们后来发现它只有10k行,所以没关系) 。你需要重新思考如何做事: -

  • 查看是否可以减少结果集。如果您要对事物进行分页,则可以使用mysql_fetch_*子句。
  • 在MySQL查询中做更多事情;不要让PHP对结果进行排序,让MySQL使用LIMIT子句来完成。
  • 通过明确指定每个列名而不是ORDER BY来减少您获取的列数。

答案 1 :(得分:1)

一些猜测:

PHP版本在每个查询中使用不同的参数和变量:MySQL无法缓存它。虽然您在MySQL-CLI上键入的版本使用相同的参数:MySQL可以从其缓存中获取它。尝试在CLI上将SQL_NO_CACHE添加到查询中,以查看结果是否需要更多时间。

您没有在同一台机器上进行测试? MySQL数据库是否用同一台机器测试PHP-MySQL查询?我的意思是:你没有在笔记本电脑上测试一个,而在某个生产服务器上测试另一个,是吗?

您正在通过网络进行测试:当MySQL服务器未与您的PHP应用程序安装在同一主机上时,您将看到一些使用“someserver.tld”而不是“localhost”作为数据库主机的MySQL连接。在这种情况下,PHP需要通过网络连接,而CLI已经具有该连接,或者仅连接本地。

实际连接需要很长时间。尝试在PHP系统之后运行并将查询计时一次。而不是“连接到服务器,查询数据库,断开连接”,您应该看到查询时间“连接到服务器,查询数据库一千次,断开连接”。一些PHP应用程序这样做:它们为每个查询连接和断开连接。如果您的MySQL服务器配置不正确,连接可能需要花费大量的总时间。

答案 2 :(得分:0)

你怎么计时?

如果通过网站上的php页面访问'long'版本,那么额外的7.1秒可能不仅仅是发送请求然后处理并呈现结果所需的时间吗?

答案 3 :(得分:0)

你是如何联系的?您使用的帐户是否在grant表中使用主机名?如果您通过TCP连接,MySQL将不得不对您的IP进行反向DNS查找,以确定您是否被允许进入。

如果是造成这种情况的连接,那么做一个简单的测试:

select version();

如果需要8秒,那么就是连接开销。如果它立即返回,那么处理你提取的数据就是PHP开销。

答案 4 :(得分:0)

函数mysql_query应该与mysql客户端同时使用。但任何额外的mysql_fetch_ *都会加起来。