2013-03-08 181 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。多個較小的查詢並不一定意味着與單個大查詢相同的執行時間。