首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >执行查询所需的时间比MySQL长得多

执行查询所需的时间比MySQL长得多
EN

Stack Overflow用户
提问于 2011-09-13 23:43:25
回答 5查看 2.5K关注 0票数 2

现在我必须开始说,我不能复制字符串。这是一个一般性的问题。

我有一个查询,其中有几个连接,当使用mysql CLI运行时,它需要0.9秒。我现在正尝试在一个PHP站点上运行相同的查询,这需要8秒。站点上还有其他一些大的连接,它们显然更慢,但是这个字符串花费的时间太长了。是否有PHP缓存可用于我需要增加的数据库连接?或者这只是意料之中的事。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-09-13 23:46:05

PHP实际上并没有对MySQL做太多的事情;它将一个查询字符串发送到服务器,然后处理结果。这里唯一的瓶颈是如果它是一个绝对庞大的查询字符串,或者如果你得到了大量的结果- PHP必须将它们缓存并解析成一个对象(或数组,取决于你使用的mysql_fetch_* )。在不知道您的查询或结果是什么的情况下,我只能猜测。

(摘自评论):如果我们有30列,比如说大约一百万行,这将需要一段时间来解析(我们后来发现它只有10k行,所以这是可以的)。你需要重新思考你做事情的方式:

  • 看看是否可以减少结果集。如果要分页,可以使用LIMIT子句。
  • 在MySQL查询中做得更多;不是让MySQL对结果进行排序,而是让ORDER BY通过显式指定每个列名而不是SELECT * FROM ....

来完成您获取的列数

票数 5
EN

Stack Overflow用户

发布于 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服务器配置不正确,连接可能会占用大量的总时间。

票数 1
EN

Stack Overflow用户

发布于 2011-09-13 23:46:36

你是怎么计时的?

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7404677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档