日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

MYSQL:explain分析

發(fā)布時(shí)間:2025/3/21 数据库 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MYSQL:explain分析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

mysql explain分析

通過(guò)explain可以知道m(xù)ysql是如何處理語(yǔ)句,分析出查詢或是表結(jié)構(gòu)的性能瓶頸。通過(guò)expalin可以得到:

1. 表的讀取順序

2.表的讀取操作的操作類型

3.哪些索引可以使用

4. 哪些索引被實(shí)際使用

5.表之間的引用

6.每張表有多少行被優(yōu)化器查詢

?

explain顯示字段

?

?

1. id :語(yǔ)句的執(zhí)行順序標(biāo)識(shí)

2. select_type:使用的查詢類型,主要有以下幾種查詢類型:

?

1)simple 簡(jiǎn)單類型

?語(yǔ)句中沒(méi)有子查詢或union

2)primary 最外層的select,不是主鍵

3)union?

union是在select 語(yǔ)句中第二個(gè)select語(yǔ)句后面所有的select,第一個(gè)select 為primary?

?

4)dependent subquery

子查詢中內(nèi)層中第一個(gè)select語(yǔ)句

5).? dependent??union

?

子查詢中union且為union中第二個(gè)select開(kāi)始的后面所有select,依賴于外部的結(jié)果集。

6). SUBQUERY

?

7).devived?

派生表的查詢語(yǔ)句

8). uncacheable subquery?

?

結(jié)果集無(wú)法緩存的子查詢

?

9). union result?

?

union中合并的結(jié)果

3. table?

?

顯示這一步所訪問(wèn)的數(shù)據(jù)庫(kù)中表的名稱

?

4. type?

這列很重要,顯示了連接使用了哪種類別,有無(wú)使用索引。type代表查詢執(zhí)行計(jì)劃(QEP)中指定的表使用的連接方式。從最好到最差的連接類型為 1.system、2.const、3. eq_reg、4. ref、5. range、6.index、7. all

1) system

system為const一個(gè)特例,即表中只有一條記錄。

2) const

const是在where條件以常量作為查詢條件,表中最多有一條記錄匹配。由于是常量,所以實(shí)際上只需要讀一次。

3) eq_reg

最多只會(huì)有一條匹配結(jié)果,一般是通過(guò)主鍵或是唯一索引來(lái)訪問(wèn)。一般會(huì)出現(xiàn)在連接查詢的語(yǔ)句中。

?

4)ref

join 語(yǔ)句中被驅(qū)動(dòng)的表索引引用查詢。這個(gè)值表示所有具有匹配的索引值的行都被用到。

5)range

索引范圍掃描

6)index

全索引樹(shù)被掃描

7) all

全表掃描,效果是最不理想的。

?

5. possible_keys

查詢可以利用的索引,如果沒(méi)有任何索引可以使用,就會(huì)顯示成null,這項(xiàng)對(duì)內(nèi)容的優(yōu)化時(shí)索引的調(diào)整非常重要。

6.key

從possible_keys中所選擇使用的索引

7. key_len

key_len列顯示mysql決定使用的鍵長(zhǎng)度,如果鍵是null,則長(zhǎng)度為null。使用的索引長(zhǎng)度,一般越短越好。

8. ref?

列出的是通過(guò)常量const,或是某個(gè)表的某個(gè)字段來(lái)過(guò)濾的。

9.rows

通過(guò)系統(tǒng)收集到的統(tǒng)計(jì)信息,估計(jì)出來(lái)的結(jié)果集記錄條數(shù)

?

10. filtered?列

  在mysql5.1里新加的,在使用explain extended時(shí)出現(xiàn)。它顯示的是針對(duì)表里符合條件的記錄數(shù)的百分比所做的一個(gè)悲觀估算值。

filtered列給出了一個(gè)百分比的值,這個(gè)百分比值和rows 列的值相乘,可以估計(jì)出那些將要和QEP 中的前一個(gè)表進(jìn)行連接的行的數(shù)目。前一個(gè)表就是指id 列的值比當(dāng)前表的id 小的表。這一列只有在EXPLAIN EXTENDED 語(yǔ)句中才會(huì)出現(xiàn)。

?

11. extra

?

?Extra:查詢中每一步實(shí)現(xiàn)的額外細(xì)節(jié)信息,主要可能會(huì)是以下內(nèi)容:

?1). Distinct:查找distinct值,所以當(dāng)mysql找到了第一條匹配的結(jié)果后,將停止該值的查詢而轉(zhuǎn)為后面其他值的查詢;?FullscanonNULLkey:子查

詢中的一種優(yōu)化方式,主要在遇到無(wú)法通過(guò)索引訪問(wèn)null值的使用使用;

2). ?ImpossibleWHEREnoticedafterreadingconsttables:MySQLQueryOptimizer通過(guò)收集到的統(tǒng)計(jì)信息判斷出不可能存在結(jié)果;

?

3). Notables:Query語(yǔ)句中使用FROMDUAL或者不包含任何FROM子句;

?

4). Notexists:在某些左連接中MySQLQueryOptimizer所通過(guò)改變?cè)蠶uery的組成而使用的優(yōu)化方法,可以部分減少數(shù)據(jù)訪問(wèn)次數(shù);

?

5). Rangecheckedforeachrecord(indexmap:N):通過(guò)MySQL官方手冊(cè)的描述,當(dāng)MySQLQueryOptimizer沒(méi)有發(fā)現(xiàn)好的可以使用的索引的時(shí)候,如果

?

發(fā)現(xiàn)如果來(lái)自前面的表的列值已知,可能部分索引可以使用。對(duì)前面的表的每個(gè)行組合,MySQL檢查是否可以使用range或index_merge訪問(wèn)方法來(lái)索取

?

行。

?6). Selecttablesoptimized away:當(dāng)我們使用某些聚合函數(shù)來(lái)訪問(wèn)存在索引的某個(gè)字段的時(shí)候,MySQLQueryOptimizer會(huì)通過(guò)索引而直接一次定位到

?

所需的數(shù)據(jù)行完成整個(gè)查詢。當(dāng)然,前提是在Query中不能有GROUPBY操作。如使用MIN()或者M(jìn)AX()的時(shí)候;

?

?7). Usingfilesort:當(dāng)我們的Query中包含ORDERBY操作,而且無(wú)法利用索引完成排序操作的時(shí)候,MySQLQueryOptimizer不得不選擇相應(yīng)的排序算法

?

來(lái)實(shí)現(xiàn)。

8). ?Usingindex:所需要的數(shù)據(jù)只需要在Index即可全部獲得而不需要再到表中取數(shù)據(jù)(索引覆蓋);

?

9). Usingindexforgroup-by:數(shù)據(jù)訪問(wèn)和Usingindex一樣,所需數(shù)據(jù)只需要讀取索引即可,而當(dāng)Query中使用了GROUPBY或者DISTINCT子句的時(shí)候,

?

如果分組字段也在索引中,Extra中的信息就會(huì)是Usingindexforgroup-by;

?

10). Usingtemporary:當(dāng)MySQL在某些操作中必須使用臨時(shí)表的時(shí)候,在Extra信息中就會(huì)出現(xiàn)Usingtemporary。主要常見(jiàn)于GROUPBY和ORDERBY等

?

操作中。

?

11). Usingwhere:如果我們不是讀取表的所有數(shù)據(jù),或者不是僅僅通過(guò)索引就可以獲取所有需要的數(shù)據(jù),則會(huì)出現(xiàn)Usingwhere信息;

?

12). Usingwherewithpushedcondition:這是一個(gè)僅僅在NDBCluster存儲(chǔ)引擎中才會(huì)出現(xiàn)的信息,而且還需要通過(guò)打開(kāi)ConditionPushdown優(yōu)化功能

?

才可能會(huì)被使用??刂茀?shù)為engine_condition_pushdown。

總結(jié)

以上是生活随笔為你收集整理的MYSQL:explain分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。