在工作中,我們需要對select語句進行優化,以便節約資源與效能,提公升查詢速度。但是,我們應該怎麼查詢乙個sql語句的效能呢?這裡記錄一種mysql自帶的效能查詢命令:explain。
部落格主要參照: 的命令詳解
一般情況下使用explain命令格式為:explain select … from … [where …]
網路上關於這些欄位的描述有很多,但是我關心的只有幾個重要的字段:
1. type:這列最重要,顯示了連線使用了哪種類別,是使用explain命令分析效能瓶頸的關鍵項之一。
結果值從好到壞依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all
1)all:full table scan, mysql將遍歷全表以找到匹配的行
2)index:full index scan,index與all區別為index型別只遍歷索引樹
3)range:索引範圍掃瞄,對索引的掃瞄開始於某一點,返回匹配值域的行。顯而易見的索引範圍掃瞄是帶有between或者where子句裡帶有查詢。當mysql使用索引去查詢一系列值時,例如in()和or列表,也會顯示range(範圍掃瞄),當然效能上面是有差異的。
4)ref:使用非唯一索引掃瞄或者唯一索引的字首掃瞄,返回匹配某個單獨值的記錄行
5)eq_ref:類似ref,區別就在使用的索引是唯一索引,對於每個索引鍵值,表中只有一條記錄匹配,簡單來說,就是多表連線中使用primary key或者 unique key作為關聯條件
6)const、system:當mysql對查詢某部分進行優化,並轉換為乙個常量時,使用這些型別訪問。如將主鍵置於where列表中,mysql就能將該查詢轉換為乙個常量
7)null:mysql在優化過程中分解語句,執行時甚至不用訪問表或索引,例如從乙個索引列裡選取最小值可以通過單獨索引查詢完成。
2. possible_keys:列指出mysql能使用哪個索引在該表中找到行。查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢使用
3. key:顯示mysql實際決定使用的鍵(索引)。如果沒有選擇索引,鍵是null
4. key_len:顯示mysql決定使用的鍵長度。如果鍵是null,則長度為null。使用的索引的長度,顯示的值為索引欄位的最大可能長度,並非實際使用長度。
5. ref:表示上述表的連線匹配條件,即哪些列或常量被用於查詢索引列上的值
6. rows:顯示mysql認為它執行查詢時必須檢查的行數。
1)using index:該值表示相應的select操作中使用了覆蓋索引(covering index)
2)using where:表示mysql伺服器將在儲存引擎檢索行後再進行過濾。許多where條件裡涉及索引中的列,當(並且如果)它讀取索引時,就能被儲存引擎檢驗,因此不是所有帶where字句的查詢都會顯示"using where"。有時"using where"的出現就是乙個暗示:查詢可受益與不同的索引。使用了where從句來限制哪些行將與下一張表匹配或者是返回給使用者。如果不想返回表中的全部行,並且連線型別all或index, 這就會發生,或者是查詢有問題。
3)using temporary:表示mysql需要使用臨時表來儲存結果集,常見於排序和分組查詢,看到這個的時候,查詢需要優化了。。這個值表示使用了內部臨時(基於記憶體的)表。乙個查詢可能用到多個臨時表。有很多原因都會導致mysql在執行查詢期間建立臨時表。兩個常見的原因是在來自不同表的上使用了distinct,或者使用了不同的order by和group by列。
4)using filesort:mysql中無法利用索引完成的排序操作稱為「檔案排序」。
5)using join buffer:改值強調了在獲取連線條件時沒有使用索引,並且需要連線緩衝區來儲存中間結果。如果出現了這個值,那應該注意,根據查詢的具體情況可能需要新增索引來改進能
MySQL查詢優化語句 explain
一 mysql 查詢優化器是如何工作的 mysql 查詢優化器有幾個目標,但是其中最主要的目標是盡可能地使用索引,並且使用最嚴格的索引來消除盡可能多的資料行。最終目標是提交 select 語句查詢資料行,而不是排除資料行。優化器試圖排除資料行的原因在於它排除資料行的速度越快,那麼找到與條件匹配的資料...
mysql優化之EXPLAIN語句
explaintbl name 或 explain extended selectselect options explain語句可以用作describe的乙個同義詞,或獲得關於mysql如何執行select語句的資訊 借助於這個語句,我們也可以分析出,索引對於查詢的作用,以及何時應該可以資料表新增...
Mysql語句效能分析 EXPLAIN
使用explain關鍵字可以模擬優化器執行sql查詢語句,從而知道mysql是如何處理你的sql語句的。分析你的查詢語句或是表結構的效能瓶頸。如下面sql語句 explain select from system area where status 1 簡單表,不使用表連線或子查詢 primary ...