现在我必须先说,我不能复制字符串。这是一个普遍的问题。
我有一个带有几个连接的查询,使用mysql CLI运行时需要0.9秒。我现在正在尝试在PHP站点上运行相同的查询,这需要8秒钟。网站上有一些其他大型连接明显较慢,但这个字符串花费的时间太长了。我需要增加数据库连接的PHP缓存吗?或者这只是预料之中。
答案 0 :(得分:5)
PHP对MySQL没有太大作用;它将查询字符串发送到服务器,并处理结果。这里唯一的瓶颈是它是一个绝对浩大的查询字符串,或者如果你得到很多结果 - PHP必须缓存并解析它们到一个对象(或数组,取决于哪个{ {1}}你使用)。在不知道您的查询或结果是什么的情况下,我只能猜测。
(来自评论):如果我们有30列,比如一百万行,这将需要一个年龄来解析(我们后来发现它只有10k行,所以没关系) 。你需要重新思考如何做事: -
mysql_fetch_*
子句。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_ *都会加起来。