1. explain分析法
explain ; // 分析查詢語句
(1) id列數字越大越先執行,如果說數字一樣大,那麼就從上往下依次執行
(2) select_type查詢型別:******、primary、dependent subquery等
(3) table表名
(4) type
從上到下效能依次下降:
system:表中只有一行資料或者是空表,且只能用於myisam和memory表
const:使用唯一索引或者主鍵,返回記錄一定是1行記錄的等值where條件時,通常type是const
eq_ref:對於每個來自於前面的表的行組合,從該表中讀取一行,這可能是最好的聯接型別
ref:對於每個來自於前面的表的行組合,從該表中讀取多行,如果使用的鍵僅僅匹配少量行,該聯接型別是不錯的
range:索引範圍掃瞄,常見於使用》,
all:全表掃瞄資料檔案,然後再在server層進行過濾返回符合要求的記錄
(5) possible_keys:可能用到的索引
(6) key:實際用到的索引
(7) key_len
用於處理查詢的索引長度,如果是單列索引,那就整個索引長度算進去,如果是多列索引,那麼查詢不一定都能使用到所有的列,具體使用到了多少個列的索引,這裡就會計算進去,沒有使用到的列,這裡不會計算進去。key_len只計算where條件用到的索引長度,而排序和分組就算用到了索引,也不會計算到key_len中。
(8) ref:如果是使用的常數等值查詢,這裡會顯示const;如果是連線查詢,被驅動表的執行計畫這裡會顯示驅動表的關聯字段
(9) rows:預估的掃瞄行數
(10) extra
using index:出現這個說明mysql使用了覆蓋索引,避免訪問了表的資料行,效率不錯!
using where:說明伺服器在儲存引擎收到行後將進行過濾。有些where中的條件會有屬於索引的列,當它讀取使用索引的時候,就會被過濾,所以會出現有些where語句並沒有在extra列**現using where這麼乙個說明
using index condition:mysql5.6以後的新特性,會先條件過濾索引,過濾完索引後找到所有符合索引條件的資料行,隨後用 where 子句中的其他條件去過濾這些資料行
using temporary:using temporary:這意味著mysql對查詢結果進行排序的時候使用了一張臨時表
using filesort:排序時無法使用索引,需要用到記憶體或磁碟進行排序
2. profiling分析法
mysql 的 query profiler 是乙個使用非常方便的 query 診斷分析工具,通過該工具可以獲取一條query 在整個執行過程中多種資源的消耗情況,如 cpu,io,ipc,swap 等,以及發生的 page faults,context switche 等等,同時還能得到該 query 執行過程中 mysql 所呼叫的各個函式在原始檔中的位置。
操作如下:
set profiling=1; // 開啟profiling分析
select @@profiling; // 確認profiling分析開啟
; // 執行查詢語句
show profiles; // 查詢剛剛被執行的語句的query_id
show profile for query ; // 分析sql
set profiling=0; // 關閉profiling分析(關閉會話會自動關閉)
mysql 效能分析 Mysql效能分析
優化mysql資料庫效能的十個引數 1 max connections 允許的同時客戶的數量。增加該值增加 mysqld 要求的檔案描述符的數量。這個數字應該增加,否則,你將經常看到 too many connections 錯誤。預設數值是100,我把它改為1024 2 record buffer...
mysql 效能分析 mysql效能分析工具
一 expalin 在sql語句之前加上explain關鍵字就可以獲取這條sql語句執行的計畫 那麼返回的這些欄位是什麼呢?我們先關心一下比較重要的幾個字段 1.select type 查詢型別 1 簡單查詢,沒有union和子查詢 2 priamry 主查詢,有union或子查詢的最外層查詢 3 ...
mysql效能分析
mysql 資料庫的效能問題 大部分情況下是磁碟io的問題 索引沒建好 查詢太複雜 索引問題的話分析慢查詢日誌,explain 他們挨個解決。偶爾也有資料庫cpu不夠的情況,如果併發高cpu不夠很正常,如果併發不高,那很可能就是group by order by random之類的 操作嚴重消耗了資...