Mysql phpMyAdmin-查询执行时间

Mysql phpMyAdmin-查询执行时间,mysql,performance,phpmyadmin,Mysql,Performance,Phpmyadmin,当我在phpMyAdmin中执行一个简单语句时 SELECT * FROM a 如果“a”有500000行,则在本地主机上的时间为几毫秒 有些复杂查询报告的时间要长得多(如预期),但有些查询报告的时间也非常快1234 …PMA将报告(等待一段时间后)查询耗时约0.0045秒。这不是全部查询时间,这是获得前25次点击的时间。或50,或任何您设置的页面大小。所以它显然很快——当你看到第一屏的行时,它就停止了。但你会注意到,它在长时间后会给你这个欺骗性的结果;这是因为MySQL需要真正完成这项工作

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

SELECT *
FROM a
如果“a”有500000行,则在本地主机上的时间为几毫秒

有些复杂查询报告的时间要长得多(如预期),但有些查询报告的时间也非常快<1/100秒,但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.005s)相比,这需要7秒以上的时间。
查询返回300000行,如果我用“LIMIT 0,50”将其限制为50行,则它小于1/100。这种差异从何而来?我不会迭代返回的对象或其他东西…

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

phpMyAdmin会自动在语句中附加一个
LIMIT
子句,因此返回的结果集更小,因此速度更快

即使您需要全部300000或500000个结果,您也应该真正使用
限制。多个较小的查询不一定意味着与单个大查询的执行时间相同。

不,phpMyAdmin没有说实话。 假设你有一张相当大的桌子,比如说一百万行。现在进行选择,您知道这需要一些时间:

从bigTable中选择*,其中value>1234
…PMA将报告(等待一段时间后)查询耗时约0.0045秒。这不是全部查询时间,这是获得前25次点击的时间。或50,或任何您设置的页面大小。所以它显然很快——当你看到第一屏的行时,它就停止了。但你会注意到,它在长时间后会给你这个欺骗性的结果;这是因为MySQL需要真正完成这项工作,以便确定返回哪些行。它运行整个查询,然后再看一眼,只返回几行。这就是你的时间

如何获取实时数据? 使用相同的条件执行count()

从bigTable中选择COUNT(1),其中value>1234

您将得到一行,告诉您总行数,PMA自然会显示执行此操作所需的确切时间。必须这样做,因为现在第一页和整个结果的含义是相同的。

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

SELECT SQL_NO_CACHE *
FROM a

但是,为什么有些结果页需要1-2秒才能显示,而另一些结果页需要几秒钟才能显示出可比的时间?这一切都在我的本地主机上…请记住,mysql将使用内部缓存进行查询:第一次运行7秒的查询可能只需要第二次运行时的一小部分时间。我已经想到了这一点,并经常重新选择查询以确保这不是缓存问题。您的计算机上有什么负载?它也在做其他需要大量计算的事情吗?同样的事情。计数(1)==计数(*)