22.聊聊select 語(yǔ)句執(zhí)行計(jì)劃!我們都知道用explain xxx分析sql語(yǔ)句的性能,但是具體從explain的結(jié)果怎么分析性能以及每個(gè)字段的含義你清楚嗎?這里我做下總結(jié)記錄,也是供自己以后參考 。
首先需要注意:MYSQL 5.6.3以前只能EXPLAIN SELECT; MYSQL5.6.3以后就可以EXPLAIN SELECT,UPDATE,DELETE
explain結(jié)果示例:
mysql> explain select * from staff;+----+-------------+-------+------+---------------+------+---------+------+------+-------+| id | select_type | table | type | possible_keys | key| key_len | ref| rows | Extra |+----+-------------+-------+------+---------------+------+---------+------+------+-------+|1 | SIMPLE| staff | ALL| NULL| NULL | NULL| NULL |2 | NULL|+----+-------------+-------+------+---------------+------+---------+------+------+-------+1 row in set先上一個(gè)官方文檔表格的中文版:
Column含義id查詢序號(hào)select_type查詢類型table表名partitions匹配的分區(qū)typejoin類型prossible_keys可能會(huì)選擇的索引key實(shí)際選擇的索引key_len索引的長(zhǎng)度ref與索引作比較的列rows要檢索的行數(shù)(估算值)filtered查詢條件過濾的行數(shù)的百分比Extra額外信息這是explain結(jié)果的各個(gè)字段,分別解釋下含義:
1. idSQL查詢中的序列號(hào) 。
id列數(shù)字越大越先執(zhí)行,如果說數(shù)字一樣大,那么就從上往下依次執(zhí)行 。
2. select_type查詢的類型,可以是下表的任何一種類型:
select_type類型說明SIMPLE簡(jiǎn)單SELECT(不使用UNION或子查詢)PRIMARY最外層的SELECTUNIONUNION中第二個(gè)或之后的SELECT語(yǔ)句DEPENDENT UNIONUNION中第二個(gè)或之后的SELECT語(yǔ)句取決于外面的查詢UNION RESULTUNION的結(jié)果SUBQUERY子查詢中的第一個(gè)SELECTDEPENDENT SUBQUERY子查詢中的第一個(gè)SELECT, 取決于外面的查詢DERIVED衍生表(FROM子句中的子查詢)MATERIALIZED物化子查詢UNCACHEABLE SUBQUERY結(jié)果集無(wú)法緩存的子查詢,必須重新評(píng)估外部查詢的每一行UNCACHEABLE UNIONUNION中第二個(gè)或之后的SELECT,屬于無(wú)法緩存的子查詢DEPENDENT 意味著使用了關(guān)聯(lián)子查詢 。
3. table查詢的表名 。不一定是實(shí)際存在的表名 ??梢詾槿缦碌闹担?br />
<unionM,N>: 引用id為M和N UNION后的結(jié)果 。<derivedN>: 引用id為N的結(jié)果派生出的表 。派生表可以是一個(gè)結(jié)果集,例如派生自FROM中子查詢的結(jié)果 。<subqueryN>: 引用id為N的子查詢結(jié)果物化得到的表 。即生成一個(gè)臨時(shí)表保存子查詢的結(jié)果 。4. type(重要)這是最重要的字段之一,顯示查詢使用了何種類型 。從最好到最差的連接類型依次為:
system,const,eq_ref,ref,fulltext,ref_or_null,index_merge,unique_subquery,index_subquery,range,index,ALL
除了all之外,其他的type都可以使用到索引,除了index_merge之外,其他的type只可以用到一個(gè)索引 。
1、system表中只有一行數(shù)據(jù)或者是空表,這是const類型的一個(gè)特例 。且只能用于myisam和memory表 。如果是Innodb引擎表,type列在這個(gè)情況通常都是all或者index
2、const最多只有一行記錄匹配 。當(dāng)聯(lián)合主鍵或唯一索引的所有字段跟常量值比較時(shí),join類型為const 。其他數(shù)據(jù)庫(kù)也叫做唯一索引掃描
3、eq_ref多表join時(shí),對(duì)于來(lái)自前面表的每一行,在當(dāng)前表中只能找到一行 。這可能是除了system和const之外最好的類型 。當(dāng)主鍵或唯一非NULL索引的所有字段都被用作join聯(lián)接時(shí)會(huì)使用此類型 。
eq_ref可用于使用’=’操作符作比較的索引列 。比較的值可以是常量,也可以是使用在此表之前讀取的表的列的表達(dá)式 。
相對(duì)于下面的ref區(qū)別就是它使用的唯一索引,即主鍵或唯一索引,而ref使用的是非唯一索引或者普通索引 。eq_ref只能找到一行,而ref能找到多行 。
4、ref對(duì)于來(lái)自前面表的每一行,在此表的索引中可以匹配到多行 。若聯(lián)接只用到索引的最左前綴或索引不是主鍵或唯一索引時(shí),使用ref類型(也就是說,此聯(lián)接能夠匹配多行記錄) 。
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- 武漢長(zhǎng)江大橋漢陽(yáng)橋頭電梯開了嗎2021
- 成都有山姆超市嗎
- 2021拼搏勵(lì)志語(yǔ)錄(關(guān)于2021拼搏勵(lì)志語(yǔ)錄
- 京東2021雙十一活動(dòng)幾號(hào)開始幾號(hào)結(jié)束
- 2021肯德基萬(wàn)圣節(jié)海綿寶寶玩具有幾款
- 2021年春分是幾月幾日 春分是立春?jiǎn)?
- 2021年全國(guó)取消禁摩令 摩托車京a牌照多少錢
- 健身教練證怎么考 樂刻健身教練培訓(xùn)多少錢
- 2021單人玩職業(yè)推薦 暗黑3攻略心得
- 考試成績(jī)猜一個(gè)數(shù)學(xué)名詞 成績(jī)是多少打一數(shù)字
