phpMyAdmin - 查询执行时间

时间:2013-03-08 11:08:50

标签: mysql performance phpmyadmin

当我在phpMyAdmin中执行一个简单的语句时,如

SELECT *
FROM a

其中“a”有500'000行,它在我的localhost上给了我几毫秒的时间。

一些复杂的查询报告时间更长(如预期的那样),但某些查询报告的时间也非常快< 1 / 100s,但phpMyAdmin中的结果页面需要更长时间才能显示。

所以我不确定,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中报告的时间相比,需要超过7秒才能获得相同的0.005s语句。 查询返回300'000行,如果我用“LIMIT 0,50”将其限制为50,则它低于1/100秒。这种差异来自哪里?我不会迭代返回的对象或其他东西......

4 个答案:

答案 0 :(得分:2)

显示的执行时间是查询在服务器上运行的时间 - 它准确无误,来自MySQL引擎本身。不幸的是,结果必须通过网络发送到您的浏览器才能显示,这需要更长的时间。

答案 1 :(得分:1)

phpMyAdmin会自动在您的语句中附加LIMIT子句,因此它返回的结果集较小,从而使其更快。

即使您需要所有300,000或500,000个结果,您也应该使用LIMIT。多个较小的查询并不一定意味着与单个大查询相同的执行时间。

答案 2 :(得分:0)

不,phpMyAdmin没有说实话。

假设您有一个很大的表,假设有一百万行。现在您进行选择,您知道的事情将需要一段时间:

    SELECT * FROM bigTable WHERE value > 1234

......,PMA将报告(经过一些等待)查询耗时约0.0045秒。 这不是整个查询时间,这是获取前25个匹配项的时间。或50,或者您设置的页面大小。因此,这显然是很快的-一旦您获得第一屏的行,它就会停止。但是您会注意到,它在短短的几秒钟后就为您提供了这种欺骗性的结果;这是因为MySQL需要确实完成此工作,以确定要返回的行。它运行整个查询,然后再看一遍,只返回几行。这就是您所需要的时间。

如何获取实时信息?

在相同条件下执行count()。

    SELECT COUNT(1) FROM bigTable WHERE value > 1234

您将获得一行,告诉您总行数,并且自然地,PMA将显示此操作所需的确切时间。必须这样做,因为现在第一页和整个结果意味着同一件事。

答案 3 :(得分:0)

除了splash21的答案外,在测试执行时间时最好使用SQL_NO_CACHE。这样可以确保您正在实时查看查询,而不仅仅是获取缓存的结果。

SELECT SQL_NO_CACHE *
FROM a