您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)mysql查詢優(yōu)化explain命令是怎樣的,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
mysql查詢優(yōu)化的方法有很多種,explain是工作當(dāng)中用的比較多的一種檢查方式。explain翻譯即解釋,就是看mysql語句的查詢解釋計(jì)劃,從解釋計(jì)劃我們能很清楚的看到解釋的語句有沒有合理用到索引,掃描了多少行數(shù),有沒有觸及全表掃描、用到臨時(shí)表等影響慢查詢的原因。
使用很簡單,如
explain select * from user ...
執(zhí)行后會(huì)出現(xiàn)解釋計(jì)劃的表格,意義可參考下面的參數(shù),針對(duì)這些解釋計(jì)劃,我們可以作為相對(duì)應(yīng)的優(yōu)化。
id mysql查詢標(biāo)識(shí)符,即序號(hào)。
select_type 查詢類型
simple:即簡單select 查詢,不包含union及子查詢;
primary:最外層的 select 查詢;
union:表示此查詢是 union 的第二或隨后的查詢;
dependent union:union 中的第二個(gè)或后面的查詢語句, 取決于外面的查詢;
union result:union的結(jié)果;
subquery:子查詢中的第一個(gè)select;
dependent subquery:子查詢中的第一個(gè)select,取決于外面的查詢,即子查詢依賴于外層查詢的結(jié)果。
table 所有查詢到的表。
type 聯(lián)接類型,比較重要的項(xiàng),從這一項(xiàng)可以看出是否高效的重要依據(jù)
性能從好到壞依次如下:
system:表中只有一條數(shù)據(jù),這是一個(gè)特殊的const 類型;
const:針對(duì)主鍵或唯一索引的等值查詢掃描,最多只返回一行數(shù)據(jù),const 查詢速度非常快,因?yàn)樗鼉H僅讀取一次即可;
eq_ref:此類型通常出現(xiàn)在多表的 join 查詢,表示對(duì)于前表的每一個(gè)結(jié)果,都只能匹配到后表的一行結(jié)果,并且查詢的比較操作通常是=, 查詢效率較高;
ref:此類型通常出現(xiàn)在多表的 join 查詢, 針對(duì)于非唯一或非主鍵索引, 或者是使用了 最左前綴 規(guī)則索引的查詢;
fulltext:全文索引檢索,要注意,全文索引的優(yōu)先級(jí)很高,若全文索引和普通索引同時(shí)存在時(shí),mysql不管代價(jià),優(yōu)先選擇使用全文索引;
ref_or_null:與ref方法類似,只是增加了null值的比較。實(shí)際用的不多;
unique_subquery:用于where中的in形式子查詢,子查詢返回不重復(fù)值唯一值;
index_subquery:用于in形式子查詢使用到了輔助索引或者in常數(shù)列表,子查詢可能返回重復(fù)值,可以使用索引將子查詢?nèi)ブ兀?/p>
index_merge:表示查詢使用了兩個(gè)以上的索引,最后取交集或者并集,常見and,or的條件使用了不同的索引,官方排序這個(gè)在ref_or_null之后,但是實(shí)際上由于要讀取所個(gè)索引,性能可能大部分時(shí)間都不如range;
range:表示使用索引范圍查詢,通過索引字段范圍獲取表中部分?jǐn)?shù)據(jù)記錄。這個(gè)類型通常出現(xiàn)在 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN操作中,此時(shí)輸出的 ref 字段為 NULL并且key_len字段是此次查詢中使用到的索引的最長的那個(gè);
index:全表掃描,只是掃描表的時(shí)候按照索引次序進(jìn)行而不是行。主要優(yōu)點(diǎn)就是避免了排序,但是開銷仍然非常大,這種情況時(shí), Extra 字段會(huì)顯示 Using index;
all:性能最差的情況,使用了全表掃描,系統(tǒng)必須避免出現(xiàn)這種情況。
possible_keys 可能用到的索引。
key 真正用到的索引。
key_len 使用了索引字節(jié)的長度。
ref 顯示索引的哪一列被使用了。
rows 掃描了多少行數(shù),也是性能評(píng)估的重要依據(jù)。
extra 額度信息,常見的有以下幾種。
Distinct:一旦找到了與行相聯(lián)合匹配的行就不再搜索了;
Using filesort:使用了文件排序,性能非常慢,需要優(yōu)化。
Using index:查詢使用到了索引,列數(shù)據(jù)是從僅僅使用了索引中的信息而沒有讀取實(shí)際的行動(dòng)的表返回的,這發(fā)生在對(duì)表的全部的請(qǐng)求列都是同一個(gè)索引的部分的時(shí)候。
Using temporary:使用了臨時(shí)表排序,性能非常慢,需要優(yōu)化。
Using where:表示使用了where進(jìn)行查詢,不是很重要。
ALL:這個(gè)連接類型對(duì)于前面的每一個(gè)記錄聯(lián)合進(jìn)行完全掃描,這一般比較糟糕,需要優(yōu)化。
以上就是mysql查詢優(yōu)化explain命令是怎樣的,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。