MySQL explain 命令
生活随笔
收集整理的這篇文章主要介紹了
MySQL explain 命令
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
概述
MySQL 的 explain 命令,主要用于查看實際查詢過程中的一些執行細節(執行計劃),也是查看優化器決定如何執行查詢的主要方法
explain 使用示例
explain 的使用也很簡單,在 select 語句之前增加 explain 關鍵字再執行整個語句即可。explain 的使用示例如下所示:
-- 在 select 語句前增加 explain 關鍵字即可 explain select id, name, age, register_date from user where name = '小美' and age = 22 and register_date = '2015-03-05'最終返回的數據如下所示:
注意,如果在查詢語句的 from 子句中不包含子查詢的情況下,使用 explain 命令并不會真正地執行查詢;但是如果包含了,那么 explain 仍然會執行子查詢,并將子查詢的查詢結果放在臨時表中。
explain 返回字段介紹
使用 explain 命令之后,將會返回優化器給這條查詢語句制定的執行計劃相關信息,這些信息里面主要包含以下的一些字段:
- id:查詢子句的執行順序,值越大越先執行,相等的情況下,排在前面的先執行
- select_type:查詢類型,一共有三個取值
- PRIMARY:代表的是復雜查詢中最外層的 select 語句
- DERIVED:代表的是 from 后面的子查詢叫衍生表(或者派生表)
- SUBQUERY:代表的是 select 中的子查詢
- table:表示數據從哪張表(或者哪個查詢子句)查詢出來
- partitions:表示數據從哪個分區表中查詢出來的(小知識:一張表底層是由一個或多個分區表組成的,不同的數據可能會放到不同的分區表上)
- type:表示關聯類型或訪問類型,即 MySQL 決定如何查找表中的行,以及查找數據行記錄的大概范圍。性能從最優到最差分別為:
- null:為空時,表示 MySQL 能在優化階段分解查詢語句,在執行階段用不著再訪問表或索引。例如:從表中查詢最小的主鍵值
- system:當查詢的表中只有一條數據時
- const:用于主鍵或唯一索引鍵的列與常數進行比較時
- eq_ref:使用了主鍵或唯一索引的全部部分,被連接使用時,最多只會返回一條符合條件的記錄。
- range:通常出現在范圍查找中,使用索引來檢索給定范圍的行
- index:從二級索引的第一個葉子節點開始掃描,一直到最后一個葉子節點
- ALL:從主鍵索引的第一個葉子節點開始掃描,一直到最后一個葉子節點
- 一般來說,查詢最好能達到 ref 級別,最低要達到 range 級別
- posiible_keys:查詢過程中可能會被使用到的索引
- key:實際使用的索引。有可能 posiible_keys 不為空,但是 key 為空,因為 MySQL 最終會根據實際情況來判斷是否使用索引,如果使用索引的代價比不使用索引的代價還大,那么 MySQL 將不會使用索引
- key_len:顯示了 MySQL 使用的索引字段長度,由這個值可以確定使用索引的部分
- ref:查詢字段的比較值,const (常量)或者具體的列的名稱
- rows:MySQL 預估的要掃描的行數
- extra:一些額外信息
- Using index:在符合使用覆蓋索引的場景情況下
- Using where:使用了 where 語句,且要比較的列上沒有索引
- Using index condition:查詢的列沒有完全被索引覆蓋
- Using temporary:查詢過程中使用了臨時表
- Using filesort:使用外部排序,而非索引排序。如果數據較小時將在內存排序,否則需要在磁盤完成排序
- Select tables optimized away:使用某些聚合函數(比如:max、min)來訪問存在索引的某個字段時,結果直接可以用索引上獲得
總結
以上是生活随笔為你收集整理的MySQL explain 命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 往写好的html插入标签,写一个可插入自
- 下一篇: 台式计算机配置清单及价格,电脑配置清单及