2013-03-08 179 views
2

当我在phpMyAdmin执行一个简单的语句像phpMyAdmin的 - 查询执行时间

SELECT * 
FROM a 

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

一些复杂的查询报告时间比预期的要长,但有些查询报告的速度也非常快,但是phpMyAdmin中的结果页面需要更长的时间才能显示。

所以我不确定,在phpMyAdmin中显示的执行时间是否真的真实准确?它是如何衡量的?它是否用所有子查询,联接等来衡量整个查询?

谢谢!

UPDATE

我觉得这一定是来自像我自己的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'; 

,并与在报告时间需要7秒钟以上phpMyAdmin的0.005s相同的声明。 查询返回300'000行,如果我用“LIMIT 0,50”将其限制为50,则它不到1/100s。这种差异从哪里来?我不遍历返回的对象或东西...

回答

2

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

+0

但是为什么一些结果页面需要1-2秒才能显示,而其他几秒钟显示可比较的时间呢?这一切都在我的本地主机上...... – 2013-03-08 12:42:51

+0

请记住,mysql将使用内部缓存进行查询:第一次需要7秒的查询可能仅仅是第二次运行时的一小部分。 – Oli 2013-03-08 14:11:01

+0

我已经想到了,经常重新选择查询以确保它不是缓存问题。 – 2013-03-08 14:12:07

1

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

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