当我在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秒。这种差异来自哪里?我不会迭代返回的对象或其他东西......
答案 0 :(得分:2)
显示的执行时间是查询在服务器上运行的时间 - 它准确无误,来自MySQL引擎本身。不幸的是,结果必须通过网络发送到您的浏览器才能显示,这需要更长的时间。
答案 1 :(得分:1)
phpMyAdmin会自动在您的语句中附加LIMIT
子句,因此它返回的结果集较小,从而使其更快。
即使您需要所有300,000或500,000个结果,您也应该使用LIMIT
。多个较小的查询并不一定意味着与单个大查询相同的执行时间。
答案 2 :(得分:0)
假设您有一个很大的表,假设有一百万行。现在您进行选择,您知道的事情将需要一段时间:
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