国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

面試前必須知道的MySQL命令【explain】

Cc_2011 / 1768人閱讀

摘要:前言只有光頭才能變強(qiáng)刷面試題的時(shí)候,不知道你們有沒有見過這兩個(gè)命令和反正我就見過了之前雖然知道這兩個(gè)命令大概什么意思,但一直沒有去做筆記。讀懂命令結(jié)果命令輸出的結(jié)果有列包含一組數(shù)字,表示查詢中執(zhí)行子句或操作表的順序。

前言
只有光頭才能變強(qiáng)

刷面試題的時(shí)候,不知道你們有沒有見過MySQL這兩個(gè)命令:explainprofile(反正我就見過了)..

之前雖然知道這兩個(gè)命令大概什么意思,但一直沒有去做筆記。今天發(fā)現(xiàn)自己的TODO LIST有這么兩個(gè)命令,于是打算來學(xué)習(xí)一番,記錄一下~

使用的MySQL的版本為5.6.38

一、explain命令 1.1體驗(yàn)explain命令

首先我們來體驗(yàn)一下explain命令是怎么使用的,以及輸出的結(jié)果是什么:

explain select * from table_user ;

輸出結(jié)果:

發(fā)現(xiàn)很使用起來很簡(jiǎn)單,只要explain后邊跟著SQL語句就完事了(MySQL5.6之前的版本,只允許解釋SELECT語句,從 MySQL5.6開始,非SELECT語句也可以被解釋了)。

1.2為什么需要explain命令

我們很多時(shí)候編寫完一條SQL語句,往往想知道這條SQL語句執(zhí)行是否高效。或者說,我們建立好的索引在這條SQL語句中是否使用到了,就可以使用explain命令來分析一下!

簡(jiǎn)單來說:通過explain命令我們可以學(xué)習(xí)到該條SQL是如何執(zhí)行的,隨后解析explain的結(jié)果可以幫助我們使用更好的索引,最終來優(yōu)化它!

通過explain命令我們可以知道以下信息:表的讀取順序,數(shù)據(jù)讀取操作的類型,哪些索引可以使用,哪些索引實(shí)際使用了,表之間的引用,每張表有多少行被優(yōu)化器查詢等信息。

// 好了,我們下面看一下explain出來的結(jié)果是怎么看的。

1.3讀懂explain命令結(jié)果

explain命令輸出的結(jié)果有10列:id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra

1.3.1id
包含一組數(shù)字,表示查詢中執(zhí)行SELECT子句或操作表的順序

在id列上也會(huì)有幾種情況:

如果id相同執(zhí)行順序由上至下。

如果id不相同,id的序號(hào)會(huì)遞增,id值越大優(yōu)先級(jí)越高,越先被執(zhí)行。

(一般有子查詢的SQL語句id就會(huì)不同)

1.3.2select_type
表示select查詢的類型

select_type屬性下有好幾種類型:

SIMPLLE:簡(jiǎn)單查詢,該查詢不包含 UNION 或子查詢

PRIMARY:如果查詢包含UNION 或子查詢,則最外層的查詢被標(biāo)識(shí)為PRIMARY

UNION:表示此查詢是 UNION 中的第二個(gè)或者隨后的查詢

DEPENDENT:UNION 滿足 UNION 中的第二個(gè)或者隨后的查詢,其次取決于外面的查詢

UNION RESULT:UNION 的結(jié)果

SUBQUERY:子查詢中的第一個(gè)select語句(該子查詢不在from子句中)

DEPENDENT SUBQUERY:子查詢中的 第一個(gè) select,同時(shí)取決于外面的查詢

DERIVED:包含在from子句中子查詢(也稱為派生表)

UNCACHEABLE SUBQUERY:滿足是子查詢中的第一個(gè) select 語句,同時(shí)意味著 select 中的某些特性阻止結(jié)果被緩存于一個(gè) Item_cache 中

UNCACHEABLE UNION:滿足此查詢是 UNION 中的第二個(gè)或者隨后的查詢,同時(shí)意味著 select 中的某些特性阻止結(jié)果被緩存于一個(gè) Item_cache 中

類型有點(diǎn)多啊,我加粗的是最常見的,起碼要看得懂加粗的部分。
1.3.3table
該列顯示了對(duì)應(yīng)行正在訪問哪個(gè)表(有別名就顯示別名)。

當(dāng)from子句中有子查詢時(shí),table列是 格式,表示當(dāng)前查詢依賴 id=N 的查詢,于是先執(zhí)行 id=N 的查詢

1.3.4type
該列稱為關(guān)聯(lián)類型或者訪問類型,它指明了MySQL決定如何查找表中符合條件的行,同時(shí)是我們判斷查詢是否高效的重要依據(jù)

以下為常見的取值

ALL:全表掃描,這個(gè)類型是性能最差的查詢之一。通常來說,我們的查詢不應(yīng)該出現(xiàn) ALL 類型,因?yàn)檫@樣的查詢,在數(shù)據(jù)量最大的情況下,對(duì)數(shù)據(jù)庫的性能是巨大的災(zāi)難。

index:全索引掃描,和 ALL 類型類似,只不過 ALL 類型是全表掃描,而 index 類型是掃描全部的索引,主要優(yōu)點(diǎn)是避免了排序,但是開銷仍然非常大。如果在 Extra 列看到 Using index,說明正在使用覆蓋索引,只掃描索引的數(shù)據(jù),它比按索引次序全表掃描的開銷要少很多。

range:范圍掃描,就是一個(gè)有限制的索引掃描,它開始于索引里的某一點(diǎn),返回匹配這個(gè)值域的行。這個(gè)類型通常出現(xiàn)在 =、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN、IN() 的操作中,key 列顯示使用了哪個(gè)索引,當(dāng) type 為該值時(shí),則輸出的 ref 列為 NULL,并且 key_len 列是此次查詢中使用到的索引最長(zhǎng)的那個(gè)。

ref:一種索引訪問,也稱索引查找,它返回所有匹配某個(gè)單個(gè)值的行。此類型通常出現(xiàn)在多表的 join 查詢, 針對(duì)于非唯一或非主鍵索引, 或者是使用了最左前綴規(guī)則索引的查詢。

eq_ref:使用這種索引查找,最多只返回一條符合條件的記錄。在使用唯一性索引或主鍵查找時(shí)會(huì)出現(xiàn)該值,非常高效。

const、system:該表至多有一個(gè)匹配行,在查詢開始時(shí)讀取,或者該表是系統(tǒng)表,只有一行匹配。其中 const 用于在和 primary key 或 unique 索引中有固定值比較的情形。

NULL:在執(zhí)行階段不需要訪問表。

1.3.5possible_keys
這一列顯示查詢可能使用哪些索引來查找
1.3.6key
這一列顯示MySQL實(shí)際決定使用的索引。如果沒有選擇索引,鍵是NULL。
1.3.7key_len
這一列顯示了在索引里使用的字節(jié)數(shù),當(dāng)key列的值為 NULL 時(shí),則該列也是 NULL
1.3.8ref
這一列顯示了哪些字段或者常量被用來和key配合從表中查詢記錄出來。
1.3.9rows
這一列顯示了估計(jì)要找到所需的行而要讀取的行數(shù),這個(gè)值是個(gè)估計(jì)值,原則上值越小越好。
1.3.10extra
其他的信息

常見的取值如下:

Using index:使用覆蓋索引,表示查詢索引就可查到所需數(shù)據(jù),不用掃描表數(shù)據(jù)文件,往往說明性能不錯(cuò)。

Using Where:在存儲(chǔ)引擎檢索行后再進(jìn)行過濾,使用了where從句來限制哪些行將與下一張表匹配或者是返回給用戶。

Using temporary:在查詢結(jié)果排序時(shí)會(huì)使用一個(gè)臨時(shí)表,一般出現(xiàn)于排序、分組和多表 join 的情況,查詢效率不高,建議優(yōu)化。

Using filesort:對(duì)結(jié)果使用一個(gè)外部索引排序,而不是按索引次序從表里讀取行,一般有出現(xiàn)該值,都建議優(yōu)化去掉,因?yàn)檫@樣的查詢 CPU 資源消耗大。

最后

原本以為Explain命令是比較難學(xué)的,但查找資料看下來,之前只是不知道具體的列和列中下的屬性是什么意思而已。常見出現(xiàn)的其實(shí)也就那么幾個(gè),感覺對(duì)著每個(gè)屬性多看一會(huì),還是可以能看懂的。

當(dāng)然了,在《高性能MySQL》中也有復(fù)雜的SQL語句來分析(但我認(rèn)為我們一般不會(huì)寫到那么復(fù)雜)..

這篇文章也借鑒了很多其他優(yōu)秀的博客,如果大家有興趣的話可以去閱讀一下:

EXPLAIN 命令詳解:

https://www.cnblogs.com/gomysql/p/3720123.html

MySQL Explain 命令詳解:

http://mrzhouxiaofei.com/2018/04/06/MySQL%20Explain%20%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%A7%A3/

mysql系列_explain執(zhí)行計(jì)劃:

https://zhuanlan.zhihu.com/p/34222512

MySQL explain詳解

https://www.cnblogs.com/butterfly100/archive/2018/01/15/8287569.html

如果你覺得我寫得還不錯(cuò),了解一下:

堅(jiān)持原創(chuàng)的技術(shù)公眾號(hào):Java3y。回復(fù) 1 加入Java交流群

文章的目錄導(dǎo)航(精美腦圖+海量視頻資源):

https://github.com/ZhongFuCheng3y/3y

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/72606.html

相關(guān)文章

  • 一個(gè) 16年畢業(yè)生所經(jīng)歷 PHP 面試

    摘要:正確做法是給加索引,還有聯(lián)合索引,并不能避免全表掃描。 前言:有收獲的話請(qǐng)加顆小星星,沒有收獲的話可以 反對(duì) 沒有幫助 舉報(bào)三連 有心的同學(xué)應(yīng)該會(huì)看到我這個(gè)noteBook下面的其它知識(shí),希望對(duì)你們有些許幫助。 本文地址 時(shí)間點(diǎn):2017-11 一個(gè)16年畢業(yè)生所經(jīng)歷的php面試 一、什么是面試 二、面試準(zhǔn)備 1. 問:什么時(shí)候開始準(zhǔn)備? 2. 問:怎么準(zhǔn)備? 三、面試...

    dabai 評(píng)論0 收藏0
  • 如何"有計(jì)劃,高效率,優(yōu)簡(jiǎn)歷"應(yīng)對(duì)面試

    摘要:雖然有了十全的計(jì)劃,但如何高效率去記住上面那么多東西是一個(gè)大問題,看看我是怎么做的。 前言 前一篇文章講述了我在三月份毫無準(zhǔn)備就去面試的后果,一開始心態(tài)真的爆炸,但是又不服氣,一想到每次回來后家人朋友問我面試結(jié)果的期待臉,越覺得必須付出的行動(dòng)來證明自己了。 面經(jīng)傳送門:一個(gè)1年工作經(jīng)驗(yàn)的PHP程序員是如何被面試官虐的? 下面是我花費(fèi)兩個(gè)星期做的準(zhǔn)備,主要分三部分: 有計(jì)劃——計(jì)劃好...

    gyl_coder 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<