我有一个非常大的 MySQL 数据库(大约 100 万个项目),并且正在对该数据库运行相当复杂的查询。我在 phpMyAdmin 中输入 SQL 命令大约需要 2 秒,但使用 PHP 代码生成相同的输出大约需要 1-2 分钟。
为什么会有这样的时差?如果这是一个执行不佳的查询,那么结果是否也需要很长时间才能出现在 phpMyAdmin 中?
我有一个非常大的 MySQL 数据库(大约 100 万个项目),并且正在对该数据库运行相当复杂的查询。我在 phpMyAdmin 中输入 SQL 命令大约需要 2 秒,但使用 PHP 代码生成相同的输出大约需要 1-2 分钟。
为什么会有这样的时差?如果这是一个执行不佳的查询,那么结果是否也需要很长时间才能出现在 phpMyAdmin 中?
你确定你得到完全相同的输出吗?
如果您的数据库中有大量数据,您的查询返回多少行?
当您使用 phpMyAdmin 启动查询时,它会自动添加分页。
所以,有了这个初始查询:
select *
from test
phpMyAdmin 实际上执行了这个:
select *
from test
limit 0, 30
如果您在查询中没有该限制(从 PHP 脚本执行它时),它可以解释差异:获取 30 行和获取数百/数千/更多行不需要相同的时间(同样的事情渲染那些)。
如果您在查询中使用限制和/或不尝试获取很多行,您可以发布您的代码吗?
(另一个可能的原因是查询缓存:第一次运行查询需要很多时间;下一次,MySQL 将结果保存在缓存中)
除了简单地执行查询之外,PHP 脚本很可能还会做一些事情(例如来回混洗大量数据。)您能否向我们展示执行您的 SQL 的 PHP 代码?
请注意,如果您没有打开输出缓冲,并且将数据一块一块地输出到客户端,那会减慢您的速度,因为它会向客户端发送这么多小块,而不是一大块。看看PHP 中的输出缓冲。
最简单的形式:
ob_start();
// Output lots of data here.
ob_end_flush();
phpMyAdmin 针对处理大量数据进行了优化。看看它的内部代码,看看它是如何从查询中获取数据的,它可能会有所帮助。
另外,我假设您在与脚本相同的服务器上安装了 phpMyAdmin?