2009-10-27 351 views

回答

29

mysql有builtin profiler。您可以通過發佈set profiling=1;啓用性能分析,並使用show profiles;獲取執行時間。

+0

和SHOW PROFILE; – 2009-10-27 14:53:52

+0

這就是我在找的感謝 – mck89 2009-10-27 14:56:11

+0

[DEPRECATED !!](http://dev.mysql.com/doc/refman/5.6/en/performance-schema.html) – bobobobo 2013-04-12 23:42:23

6

如果使用PHP ..您可以在查詢之前和查詢之後使用microtime()來計算查詢執行需要多長時間。

$sql_query='SELECT * FROM table'; 
$msc=microtime(true); 
$mysql_query($sql_query); 
$msc=microtime(true)-$msc; 
echo $msc.' seconds'; // in seconds 
echo ($msc*1000).' milliseconds'; // in millseconds 
+0

這不告訴你花了多長時間MySQL來執行查詢。它告訴你PHP發送請求花費多長時間,等待它被接收,並接收結果。無論在PHP客戶端上運行什麼,它都會變慢,如果PHP客戶端和MySQL服務器之間有任何延遲,結果將會進一步不準確。 – 2017-01-05 09:28:04

+0

由此我得到了奇怪的結果,有時它報告8000行的「2.15 s」,其他時間報告6000行的「1,503,023,491.52 s」。如果我應用'number_format($ msc,2)',那麼我會得到像負數一樣的事件陌生人結果。 – Slam 2017-08-18 02:38:29

5

嘗試......

mysql_query("SET profiling = 1;"); 
if (mysql_errno()) { die("ERROR ".mysql_errno($link) . ": " . mysql_error($link)); } 

/* It goes without saying that this is your actual query that you want to measure the execution time of */ 
$query="SELECT some_field_name FROM some_table_name"; 
$result = mysql_query($query); 
if (mysql_errno()) { die("ERROR ".mysql_errno($link) . ": " . mysql_error($link)); } 

$exec_time_result=mysql_query("SELECT query_id, SUM(duration) FROM information_schema.profiling GROUP BY query_id ORDER BY query_id DESC LIMIT 1;"); 
if (mysql_errno()) { die("ERROR ".mysql_errno($link) . ": " . mysql_error($link)); } 
$exec_time_row = mysql_fetch_array($exec_time_result); 

echo "<p>Query executed in ".$exec_time_row[1].' seconds'; 
+0

這被標記爲MySQL問題。並不是每個使用MySQL的人都在使用PHP。 – 2017-01-05 09:30:47