phpMyAdmin - 查询执行时间
Posted
技术标签:
【中文标题】phpMyAdmin - 查询执行时间【英文标题】:phpMyAdmin - Query Execution Time 【发布时间】:2013-02-23 21:55:40 【问题描述】:当我在 phpMyAdmin 中执行一个简单的语句时
SELECT *
FROM a
其中“a”有 500'000 行,它在我的本地主机上给了我几毫秒的时间。
一些复杂的查询报告的时间更长(如预期的那样),但一些查询的报告时间也非常快
所以我不确定,在 phpMyAdmin 中显示的执行时间真的真实准确吗?它是如何测量的?它是否使用所有子选择、连接等测量整个查询?
谢谢!
更新
我认为使用我自己的 PHP 脚本进行测试是个好主意,例如:
$start = microtime(true);
$sql = "same statement as in phpMyAdmin";
$db = new PDO('mysql:host=localhost;dbname=mydb', 'root', 'lala');
$statement = $db -> prepare($sql);
$statement -> execute();
echo microtime(true) - $start . ' seconds';
与 phpMyAdmin 中报告的相同语句 0.005 秒的时间相比,这需要超过 7 秒。 查询返回 300'000 行,如果我用“LIMIT 0,50”将其限制为 50,则它低于 1/100。这种差异从何而来?我不会遍历返回的对象或其他东西......
【问题讨论】:
【参考方案1】:除了 splash21 的回答之外,在测试执行时间时使用 SQL_NO_CACHE 是一个好主意。这样可以确保您查看的是实时查询,而不仅仅是获取缓存的结果。
SELECT SQL_NO_CACHE *
FROM a
【讨论】:
【参考方案2】:不,phpMyAdmin 没有说实话。
假设您有一张相当大的桌子,假设有一百万行。现在您进行选择,您知道这需要一段时间:
SELECT * FROM bigTable WHERE value > 1234
...PMA 将报告(等待一段时间后)查询花费了大约 0.0045 秒。 这不是整个查询时间,这是获得前 25 次点击的时间。或 50,或任何您设置的页面大小。所以它显然很快 - 一旦你得到第一屏的行,它就会停止。但是你会注意到它在很长的几秒钟后给了你这个欺骗性的结果;这是因为 MySQL 需要 真正 完成这项工作,以确定要返回哪些行。它运行整个查询,然后再看一遍,只返回几行。这就是你得到的时间。
如何获取实时时间?
在相同的条件下执行 count()。
SELECT COUNT(1) FROM bigTable WHERE value > 1234
您会看到 ONE 行告诉您总行数,自然而然,PMA 会显示此所需的确切时间。必须这样做,因为现在第一页和整个结果的含义相同。
【讨论】:
同样的事情。 COUNT(1) === COUNT(*)【参考方案3】:phpMyAdmin 会自动将LIMIT
子句附加到您的语句中,因此它的返回结果集较小,从而使其更快。
即使您需要全部 300,000 或 500,000 个结果,您也应该真正使用 LIMIT
。多个较小的查询不一定意味着与单个大查询相同的执行时间。
【讨论】:
【参考方案4】:显示的执行时间是查询在服务器上运行所花费的时间 - 它是准确的,并且来自 MySQL 引擎本身。不幸的是,结果必须通过网络发送到您的浏览器才能显示,这需要更长的时间。
【讨论】:
但是为什么有些结果页面需要 1-2 秒才能显示,而其他页面则需要几分之一秒才能显示可比较的时间?这一切都在我的本地主机上...... 请记住,mysql 将对查询使用内部缓存:第一次需要 7 秒的查询可能只需要第二次运行的一小部分。 我已经想到了这一点,并经常重新选择查询以确保它不是缓存问题。 您的机器上有什么样的负载?它是否也在做其他需要大量计算的事情?以上是关于phpMyAdmin - 查询执行时间的主要内容,如果未能解决你的问题,请参考以下文章
从 phpmyadmin(好)和 PHP 脚本(坏)执行 sql 查询的不同结果
为什么phpMyAdmin需要很长时间来显示查询,但是显示查询执行得很快? [关闭]