天天看點

使用show profiles分析SQL性能

使用show profiles分析sql性能。

show profiles是5.0.37之後添加的,要想使用此功能,要確定版本在5.0.37之後。

mysql> select version();

mysql> show profiles;

empty set (0.02 sec)

mysql> show variables like "%pro%";

可以看到profiling 預設是off的。

開啟profile

mysql> set profiling=1;

把資料寫入到資料庫的時,常常會碰到先要檢測要插入的記錄是否存在,然後決定是否要寫入。

最直覺的辦法,就是在代碼裡執行一次全表查詢,然後根據查詢結果是否為空決定下一步操作,這樣顯然非常耗費性能。

下面是幾種性能較好的查詢方法。

然後讀取count(*)的值判斷記錄是否存在。對于這種方法性能上有些浪費,我們隻是想判斷記錄記錄是否存在,沒有必要全部都查出來。

然後讀取語句執行所影響的行數。

當然這裡limit 1很重要。這要mysql找到一條記錄後就不會在往下找了。這裡執行所影響的行數不是0就是1,性能提高了不少。

如果你用的是pdo,可以用rowcount(),很容易就都到執行所影響的行數。

隻能判斷是否存在記錄,子查詢中的select *在執行時會被忽略掉。

以上三種方法,在mysql中測試,資料量一百萬左右,差距不是特别大,

使用show profiles分析SQL性能

其中,速度最快的是使用下面的格式查詢,

大家在以後的查詢中可以參考上面的方法。