2010-05-10 45 views
4

我有一個選擇和查詢像下面...如何測試mySQL查詢的速度?

$sql = "SELECT * 
     FROM notifications 
     WHERE to_id='".$userid."' 
      AND (alert_read != '1' OR user_read != '1') 
     ORDER BY alert_time DESC"; 
    $result = mysql_query($sql); 

我怎麼測試查詢了多長時間運行?

回答

1

如果運行MySQL控制檯您的查詢時,速度將會顯示之後,他們查詢跑。

+0

我甚至沒有想到這一點,謝謝! – Chris 2010-05-10 14:07:51

+0

Yaa!吻。 :) – 2010-05-11 02:57:21

+0

是的,我認爲一個更復雜的答案,但老實說,如果你只是基本的調整感興趣,只是使用已建成的MySQL客戶端功能:) – Rob 2010-05-11 12:51:33

2

在mysql_query之前和之後使用php函數microtime(),然後比較結果。

$time1 = (int) microtime(); 
$result = mysql_query($sql); 
$time2 = (int) microtime(); 

echo ($time2 - $time1); 

(如果你使用microtime中(真) - 返回浮點數,你會得到更少acurate的數量)

+0

你寫了評論到另一篇文章,microtime衡量PHP的速度。我認爲對於運行時間短於1毫秒的簡單查詢來說,它可能沒用,但我也沒有看到像這樣測量快速查詢的理由。我認爲對於慢於1毫秒的查詢(以及有問題的查詢比這慢),它足夠準確。只有當你在遠程機器上運行db server時,纔會這麼準確。 – marianboda 2010-05-10 14:19:15

9

有一個MySQL的系統變量profiling這是在INFORMATION_SCHEMA數據庫中創建您的特定會話。請參見下面的代碼:

mysql> set profiling=1; 

只需簡單地執行查詢...查詢的執行會話將被存儲在INFORMATION_SCHEMA

mysql> select count(*) from client where broker_id=2; 

一旦查詢完成後,只執行這行:

mysql> show profiles; 

,顯示查詢的整個執行時間。只要你執行並告訴下面的查詢ID來獲得執行/查詢速度。

mysql> show profile for query 1;