现在我必须开始说,我不能复制字符串。这是一个一般性的问题。
我有一个查询,其中有几个连接,当使用mysql CLI运行时,它需要0.9秒。我现在正尝试在一个PHP站点上运行相同的查询,这需要8秒。站点上还有其他一些大的连接,它们显然更慢,但是这个字符串花费的时间太长了。是否有PHP缓存可用于我需要增加的数据库连接?或者这只是意料之中的事。
发布于 2011-09-13 23:46:05
PHP实际上并没有对MySQL做太多的事情;它将一个查询字符串发送到服务器,然后处理结果。这里唯一的瓶颈是如果它是一个绝对庞大的查询字符串,或者如果你得到了大量的结果- PHP必须将它们缓存并解析成一个对象(或数组,取决于你使用的mysql_fetch_*
)。在不知道您的查询或结果是什么的情况下,我只能猜测。
(摘自评论):如果我们有30列,比如说大约一百万行,这将需要一段时间来解析(我们后来发现它只有10k行,所以这是可以的)。你需要重新思考你做事情的方式:
LIMIT
子句。ORDER BY
通过显式指定每个列名而不是SELECT * FROM ...
.来完成您获取的列数
发布于 2011-09-13 23:57:58
一些胡乱猜测:
PHP版本使用不同的参数和变量,每个查询: MySQL不能缓存它。而您在MySQL-CLI上输入的版本使用相同的参数: MySQL可以从它的缓存中获取它。尝试将SQL_NO_CACHE
添加到CLI上的查询中,以查看结果是否需要更多时间。
你不是在同一台机器上测试吗?测试PHP-MySQL查询所用的MySQL数据库和CLI是同一台机器吗?我的意思是:你不会是在你的笔记本电脑上测试一个,而在某个生产服务器上测试另一个吧?
您正在通过网络进行测试:当MySQL服务器没有安装在与您的PHP相同的主机上时,您将看到一些使用"someserver.tld“而不是"localhost”作为数据库主机的MySQL连接。在这种情况下,PHP将需要通过网络进行连接,而您的CLI已经具有该连接,或者仅连接到本地。
实际的连接需要很长时间。尝试一次接一次地从PHP系统中运行和定时查询一千次。你应该看到的不是“连接到服务器,查询数据库,断开连接”,而是“连接到服务器,查询数据库一千次,断开连接”。一些PHP应用程序做到了这一点:它们为每个查询连接和断开连接。如果您的MySQL服务器配置不正确,连接可能会占用大量的总时间。
发布于 2011-09-13 23:46:36
你是怎么计时的?
如果通过网站上的php页面访问“long”版本,那么额外的7.1秒难道不是发送请求然后处理和呈现结果所需的时间吗?
https://stackoverflow.com/questions/7404677
复制相似问题