我試圖用兩種方法來測量特定MySQL查詢的速度。MySQL分析顯示比PHP microtime差異查詢時間更慢
在MySQL
SET profiling = 1;
QUERY;
SHOW PROFILES;
在PHP
$time = microtime(true);
Database::instance()->query(...);
$time = microtime(true) - $time;
的時間從顯示配置文件被顯示爲〜0.009s(持續時間)。 從$時間顯示的時間是〜0.001秒。
我很困惑,因爲我期待PHP測量比MySQL測量慢。這沒有任何意義。有人可以解釋嗎?
編輯: 我知道緩存,我試過它與SQL_NO_CACHE,但它似乎沒有區別。但我注意到,當我重新啓動MySQL服務器時,前幾次性能分析嘗試與PHP報告的內容一致。但是,當我跑了剖析幾次,有在持續時間上突然跳躍:
1 0.00137900 SELECT COUNT(*) AS count ↵
2 0.00138800 SELECT COUNT(*) AS count ↵
3 0.00912700 SELECT COUNT(*) AS count ↵
4 0.00907300 SELECT COUNT(*) AS count ↵
5 0.00878900 SELECT COUNT(*) AS count ↵
6 0.00984200 SELECT SQL_NO_CACHE COUNT(*) AS count ↵
7 0.00895200 SELECT SQL_NO_CACHE COUNT(*) AS count ↵
打破,是以查詢〜0.009s,它出現在時間的跳躍是從創建一個TMP表。但前兩次它做得非常快(1和2)。基於PHP microtime(),它也非常快。與分析器的東西放慢後呢?
starting 0.000055
checking permissions 0.000004
Opening tables 0.000013
System lock 0.000050
optimizing 0.000010
statistics 0.000041
preparing 0.000012
Creating tmp table 0.007696
executing 0.000014
Copying to tmp table 0.000317
Sorting result 0.000031
Sending data 0.000007
removing tmp table 0.000423
Sending data 0.000008
init 0.000007
optimizing 0.000011
executing 0.000005
end 0.000003
query end 0.000011
closing tables 0.000002
removing tmp table 0.000004
關閉表0.000006 釋放項目0.000054 登錄慢查詢0.000002 清理0.000003
很多事情可能會導致這種小的差異。你的MySQL服務器和PHP運行在不同的機器上嗎?查詢是否返回大量數據?測量查詢間隔結束時,您的php客戶端可能尚未檢索到數據。 – 2014-10-02 19:04:35
它們在同一臺機器上運行。查詢返回一個計數,幾乎沒有數據。 – allenylzhou 2014-10-02 19:18:15