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