mysql explain中的名词解释
參考文章
EXPLAIN table_name或:EXPLAIN [EXTENDED] SELECT select_options
前者可以得出一個表的字段結構等等,后者主要是給出相關的一些索引信息。
- id 相同執行順序由上到下
- 如果是子查詢,id序號會自增,id值越大優先級就越高,越先被執行。
(二)select_type列:數據讀取操作的操作類型
- SIMPLE:簡單的select 查詢,SQL中不包含子查詢或者UNION。
- PRIMARY:查詢中包含復雜的子查詢部分,最外層查詢被標記為PRIMARY
- SUBQUERY:在select 或者WHERE 列表中包含了子查詢
- DERIVED:在FROM列表中包含的子查詢會被標記為DERIVED(衍生表),MYSQL會遞歸執行這些子查詢,把結果集放到零時表中。
- UNION:如果第二個SELECT 出現在UNION之后,則被標記位UNION;如果UNION包含在FROM子句的子查詢中,則外層SELECT 將被標記為DERIVED
- UNION RESULT:從UNION表獲取結果的select
Using index 表示相應的select 操作使用了覆蓋索引,避免訪問了表的數據行,效率不錯。如果同時出現Using where ,表明索引被用來執行索引鍵值的查找。如果沒有同時出現using where 表明索引用來讀取數據而非執行查找動作。
在數據庫中,大多數時,表的“列”稱為“字段” ,每個字段包含某一專題的信息。就像“通訊錄”數據庫中,“姓名”、“聯系電話”這些都是表中所有行共有的屬性,所以把這些列稱為“姓名”字段和“聯系電話”字段。如圖,其中id,trade_id,operator就是字段。
執行Mysql的explain extended的輸出會比單純的explain多一列filtered(MySQL5.7缺省就會輸出filtered),它指返回結果的行占需要讀到的行(rows列的值)的百分比
訪問類型
1、system 表只有一條記錄(等于系統表),這是const類型的特例,平時業務中不會出現。
2、const 通過索引一次查到數據,該類型主要用于比較primary key 或者unique 索引,因為只匹配一行數據,所以很快;如果將主鍵置于WHERE語句后面,Mysql就能將該查詢轉換為一個常量。
3、eq_ref 唯一索引掃描,對于每個索引鍵,表中只有一條記錄與之匹配。常見于主鍵或者唯一索引掃描。
4、ref 非唯一索引掃描,返回匹配某個單獨值得所有行,本質上是一種索引訪問,它返回所有匹配某個單獨值的行,就是說它可能會找到多條符合條件的數據,所以他是查找與掃描的混合體。>詳解:這種類型表示mysql會根據特定的算法快速查找到某個符合條件的索引,而不是會對索引中每一個數據都進行一 一的掃描判斷,也就是所謂你平常理解的使用索引查詢會更快的取出數據。而要想實現這種查找,索引卻是有要求的,要實現這種能快速查找的算法,索引就要滿足特定的數據結構。簡單說,也就是索引字段的數據必須是有序的,才能實現這種類型的查找,才能利用到索引。
5、range 只檢索給定范圍的行,使用一個索引來選著行。key列顯示使用了哪個索引。一般在你的WHERE 語句中出現between 、< 、> 、in 等查詢,這種給定范圍掃描比全表掃描要好。因為他只需要開始于索引的某一點,而結束于另一點,不用掃描全部索引。
6、index FUll Index Scan 掃描遍歷索引樹(index:這種類型表示是mysql會對整個該索引進行掃描。要想用到這種類型的索引,對這個索引并無特別要求,只要是索引,或者某個復合索引的一部分,mysql都可能會采用index類型的方式掃描。但是呢,缺點是效率不高,mysql會從索引中的第一個數據一個個的查找到最后一個數據,直到找到符合判斷條件的某個索引)。
7、ALL 全表掃描 從磁盤中獲取數據 百萬級別的數據ALL類型的數據盡量優化。
總結
以上是生活随笔為你收集整理的mysql explain中的名词解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 日历之 poj1008玛雅日历
- 下一篇: 猴子吃桃问题的函数递归解决方案