2

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

SELECT *
FROM a

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

一些复杂的查询报告的时间更长(如预期的那样),但一些查询的报告时间也非常快 < 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 中报告的相同语句 0.005 秒的时间相比,这需要超过 7 秒。查询返回 300'000 行,如果我使用“LIMIT 0,50”将其限制为 50,则它低于 1/100。这种差异从何而来?我不会迭代返回的对象或其他东西......

4

4 回答 4

3

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

于 2013-03-08T11:49:47.973 回答
1

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

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

于 2013-04-24T09:44:31.827 回答
0

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

SELECT SQL_NO_CACHE *
FROM a
于 2020-10-13T17:21:35.183 回答
-1

不,phpMyAdmin 没有说实话。

想象一下,你有一张很大的桌子,假设有一百万行。现在你做了一个选择,你知道这需要一段时间:

    SELECT * FROM bigTable WHERE value > 1234

...并且 PMA 将报告(等待一段时间后)查询花费了大约 0.0045 秒。这不是整个查询时间,这是获得前 25 次点击的时间。或 50,或任何您将页面大小设置为的值。所以它显然很快 - 一旦你得到第一屏的行,它就会停止。但是你会注意到它在很长的几秒钟后给了你这个欺骗性的结果;这是因为 MySQL 需要真正完成这项工作,以确定要返回哪些行。它运行整个查询,然后再看一遍,只返回几行。这就是你得到的时间。

如何获得实时?

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

    SELECT COUNT(1) FROM bigTable WHERE value > 1234

你会得到一行告诉你总行数,自然而然,PMA 会显示这需要的确切时间。它必须这样做,因为现在第一页和整个结果意味着同样的事情。

于 2019-08-30T22:23:17.323 回答