【问题标题】:Database command runs glacially in my PHP script, quickly in phpMyAdmin数据库命令在我的 PHP 脚本中快速运行,在 phpMyAdmin 中快速运行
【发布时间】:2010-11-13 06:42:51
【问题描述】:

我有一个非常大的 MySQL 数据库(大约 100 万个项目),并且正在对该数据库运行相当复杂的查询。我在 phpMyAdmin 中输入 SQL 命令大约需要 2 秒,但使用 PHP 代码生成相同的输出大约需要 1-2 分钟。

为什么会有这样的时差?如果这是一个执行不佳的查询,那么结果是否也需要很长时间才能出现在 phpMyAdmin 中?

【问题讨论】:

  • 您可能应该发布您的查询或特定内容。没有任何东西可以诊断是非常困难的。如果我不得不猜测,我会说您可能会遇到查询缓存(即,您首先在 PHP 中运行它,然后在 phpMyAdmin 中运行它并且它已经被缓存了)。不过,这完全取决于您如何遇到此问题。你能提供更多细节吗?

标签: php database query-optimization propel


【解决方案1】:

除了简单地执行查询之外,PHP 脚本很可能还会做一些事情(例如来回移动大量数据。)您能否向我们展示执行您的 SQL 的 PHP 代码?

请注意,如果您还没有打开输出缓冲,并且将数据逐个输出到客户端,那会降低您的速度很多,因为它向客户端发送这么多小块,而不是一大块。看看output buffering in PHP

最简单的形式:

ob_start();
// Output lots of data here.
ob_end_flush();

phpMyAdmin 已针对处理大量数据进行了优化。看看它的内部代码,看看它是如何从查询中获取数据的,它可能会有所帮助。

另外,我假设您在与脚本相同的服务器上安装了 phpMyAdmin?

【讨论】:

  • 非常感谢。我的应用程序现在更快了。额外的感谢,因为你的剪辑是可用的......单独留下 PHP 说明,我从来没有尝试过!
【解决方案2】:

您确定得到完全相同的输出吗?

如果您的数据库中有大量数据,您的查询返回多少行?

当您使用 phpMyAdmin 启动查询时,它会自动添加分页。

所以,有了这个初始查询:

select *
from test

phpMyAdmin 实际上执行了这个:

select *
from test
limit 0, 30

如果您的查询没有这个限制(从 PHP 脚本执行它时),它可以解释差异:获取 30 行和获取数百/数千/更多行不需要相同的时间(渲染这些也是一样的)。

如果您在查询中使用限制和/或不尝试获取很多行,您可以发布您的代码吗?

(另一个可能的原因是查询缓存:第一次运行查询需要很多时间;下一次,MySQL 将结果保存在缓存中)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2018-06-11
    • 1970-01-01
    • 2022-10-15
    相关资源
    最近更新 更多