使用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中測試,資料量一百萬左右,差距不是特别大,
其中,速度最快的是使用下面的格式查詢,
大家在以後的查詢中可以參考上面的方法。