系列文章目錄
文章目錄
- 系列文章目錄
- 一、type說明
- 二、MySQL中使用Show Profile
- 1.查看當前profiling配置
- 2.在會話級別修改profiling配置
- 3.查看profile記錄
- 4.要深入查看某條查詢執行時間的分布
一、type說明
我們只需要注意一個最重要的type 的信息很明顯的提現是否用到索引:
type結果值從好到壞依次是:
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
all:全表掃描
index:另一種形式的全表掃描,只不過他的掃描方式是按照索引的順序
range:有范圍的索引掃描,相對于index的全表掃描,他有范圍限制,因此要優于index
ref: 查找條件列使用了索引而且不為主鍵和unique。其實,意思就是雖然使用了索引,但該索引列的值并不唯一,有重復。這樣即使使用索引快速查找到了第一條數據,仍然不能停止,要進行目標值附近的小范圍掃描。但它的好處是它并不需要掃全表,因為索引是有序的,即便有重復值,也是在一個非常小的范圍內掃描。
const:通常情況下,如果將一個主鍵放置到where后面作為條件查詢,mysql優化器就能把這次查詢優化轉化為一個常量。至于如何轉化以及何時轉化,這個取決于優化器
一般來說,得保證查詢至少達到range級別,最好能達到ref,type出現index和all時,表示走的是全表掃描沒有走索引,效率低下,這時需要對sql進行調優。
當extra出現Using filesor或Using temproary時,表示無法使用索引,必須盡快做優化。
possible_keys:sql所用到的索引
key:顯示MySQL實際決定使用的鍵(索引)。如果沒有選擇索引,鍵是NULL
rows: 顯示MySQL認為它執行查詢時必須檢查的行數。
這里可以參考之前寫的一篇:用MySQL 執行計劃分析 DATE_FORMAT 函數對索引的影響
二、MySQL中使用Show Profile
Show profile 默認是禁用的,用處是記錄在服務器中運行的查詢耗費的時間和其他一些查詢執行狀態變更相關的數據。
1.查看當前profiling配置
show variables like ‘profiling%’
2.在會話級別修改profiling配置
set profiling =1
我在執行這個語句是,返回給我
0 row(s) affected, 1 warning(s): 1287 ‘@@profiling’ is deprecated and will be removed in a future release.
看這個提示,似乎后期的版本profiling會有變動
3.查看profile記錄
show profiles
當一條查詢提交給服務器時,此工具會記錄剖析信息到一張臨時表,并為每個查詢賦予一個從1開始的整數標識符。
4.要深入查看某條查詢執行時間的分布
show profile for query <整數標識符>