1、操作步驟
1.1 使用explain ,放在sql前面
2、解釋
我們只需要注意一個最重要的type 的信息很明顯的提現是否用到索引:
type結果值從好到壞依次是:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
一般來說,得保證查詢至少達到range級別,最好能達到ref,否則就可能會出現性能問題。
possible_keys:sql所用到的索引
key:顯示MySQL實際決定使用的鍵(索引)。如果沒有選擇索引,鍵是NULL
rows: 顯示MySQL認為它執行查詢時必須檢查的行數
3、profiling分析
想要優化一條query sql ,就要清楚這條query的性能瓶頸在哪里,mysql的profiler是一個非常方便的查詢診斷分析工具,通過該工具可以獲取一條查詢在整個執行過程中多種資源的消耗情況,例如內存消耗、I/O消耗和CPU消耗
profile的語法結構:
show profile [type [,type] …]
[for query n]
[limit row_count [offset offset]]
其中type參數可選含義如下:
all:顯示所有信息
block io:顯示輸入輸出操作阻塞的數量
context switches:顯示自動或非自動context switches的數量
cpu:顯示系統和用戶CPU使用的時間
ipc:顯示信息發送和接受的數量
memory:內存的信息
page faults:顯示主要的page faults數量
source:顯示函數的名稱,並且是那些函數所在文件的名字和行數
swaps:顯示swap數量
開啟profile
set profiling = 1;
開啟query profiler功能之后,MySQL就會自動記錄所有執行的query的profile信息
select count(*) from customers1;
通過執行show profiles 命令獲取當前系統中保存的多個query的profile的概要信息
針對單個query獲取詳細的profile信息(根據概要信息中的query_id來獲取)
show profile for query 5;