常用有三種方法:
## 1、show profile
在mysql 5.1 之后引入,默認是禁用的,可以通過以下命令開啟:
`mysql> set profiling=1;`
執行一些查詢,然后再執行如下命令:

顯示了精度很高的查詢響應時間。
繼續執行:

顯示查詢執行的每個步驟及其花費的時間,但是是根據執行步驟排序,現在需要根據時間來排序:
~~~
mysql> select state,sum(duration) as total_r,
-> round(
-> 100* sum(duration)/
-> (select sum(duration)
-> from information_schema.profiling
-> where query_id = @query_id
-> ),2) as pct_r,
-> count(*) as calls,
-> sum(duration) / count(*) as "r/call"
-> from information_schema.profiling
-> where query_id = @query_id
-> group by state
-> order by total_r desc;
~~~

可以看到花費時間最多的是打開數據表,其次是發送數據
## 2、show status
首先清空一下 ` mysql> flush status;`
執行一下查詢: `mysql> select * from cmf_course_drop where cid='9771510558193';`
執行:`mysql> show status where variable_name like 'handler%' or variable_name like 'created%';`

* Created_tmp_disk_tables
服務器在處理語句時在磁盤上創建的磁盤臨時表個數。
* Created_tmp_files
服務器創建的臨時文件個數。
* Created_tmp_tables
服務器在處理語句時創建的臨時表個數。
* Handler_commit
請求提交事務的次數。
* Handler_delete
請求從表刪除行的次數。
* Handler_external_lock
此變量與鎖定操作數量有關,主要是在表訪問的開始和結束時起作用。其值除以2,即為鎖定操作的次數。該變量是在MySQL 5.6.2里引入的。
* Handler_mrr_init
有些存儲引擎自己實現了“多范圍讀取”(Multi-Range Read)優化策略。此變量表示的是服務器使用該實現的次數。該變量是在MySQL 5.6.1里引入的。
* Handler_prepare
為兩階段提交所做的準備次數。
* Handler_read_first
請求從索引里讀取第一行的次數。
* Handler_read_key
請求基于索引值讀取行的次數。
* Handler_read_last
請求從索引里讀取最后一行的次數。比變量是在MySQL 5.5.7里引入的。
* Handler_read_next
按索引順序請求讀取下一行的次數。
* Handler_read_prev
按索引逆序請求讀取上一行的次數。
* Handler_read_rnd
根據位置請求讀取一行的次數。
* Handler_read_rnd_next
請求讀取下一行的次數。如果這個值很大,則說明你可能在執行大量的需要全表掃描的語句,或者執行大量的未正確使用索引的語句。
* Handler_rollback
請求事務回滾的次數。
## 3、查看慢查詢日志