国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

mysql數(shù)據(jù)庫explain命令用法細(xì)解

2024-07-24 12:35:31
字體:
供稿:網(wǎng)友
  一個(gè)常見的理解錯(cuò)誤:mysql在執(zhí)行explain時(shí)不會(huì)執(zhí)行sql語句,事實(shí)上如果查詢的from字段有子查詢,explain會(huì)執(zhí)行子查詢.
 
  explain只能解釋select查詢,對update,delete,insert需要重寫為select.
 
  下面就explain的各個(gè)字段分別解釋.
 
  1.id
 
  當(dāng)sql語句中有子查詢和關(guān)聯(lián)查詢時(shí)會(huì)顯示多列,id用于標(biāo)志多列數(shù)據(jù).
 
  2.possible_key
 
  顯示查詢可以使用的索引.
 
  3.key
 
  顯示mysql決定使用哪個(gè)索引來優(yōu)化對表的訪問。
 
  4.key_len
 
  mysql在索引里使用的字節(jié)數(shù),可以根據(jù)key_len計(jì)算出該索引正在使用哪些列,可以根據(jù)key_len查看sql語句使用聯(lián)合索引的情況,當(dāng)有多列索引(audit_status,status,create_time)時(shí),key_len為2時(shí),表示只用了第一個(gè)為small int的索引.
 
  5.ref
 
  顯示table在key中選取的索引中查找值所用的列或者常量.
 
  6.row
 
  mysql估計(jì)為了找到所需的行而要讀取的行數(shù),是mysql認(rèn)為它要檢查的行數(shù),而不是結(jié)果集里的行數(shù).
 
  7.select_type
 
  用于表示是簡單還是復(fù)雜的查詢,不包括子查詢和union的查詢?yōu)楹唵尾樵?如果查詢中有任何復(fù)雜的部分,外層查詢標(biāo)記為primary,復(fù)雜查詢分為四大類(SUBQUERY,DERIVED,UNION,UNION RESULT)
 
  (1)SUBQUERY:包含在select列表中的子查詢中的select,不在from子句中的select
 
  (2)DERIVED:表示包含在from子句中的select,mysql會(huì)遞歸的執(zhí)行并將結(jié)果放在一個(gè)臨時(shí)表中,服務(wù)器內(nèi)部稱其為“派生表”
 
  (3)UNION:在union中第二個(gè)和隨后的select被標(biāo)記為union。
 
  (4)UNION RESULT:用來在UNION產(chǎn)生的匿名臨時(shí)表檢索結(jié)果的select被標(biāo)記為union result
 
  綜上,select_type共有SIMPLE,PRIMARY,SUBQUERY,DERIVED,UNION,UNION RESULT 六種常見情況。
 
  8.table
 
  一般情況下為表名,當(dāng)from子句中有子查詢或者union時(shí),table列會(huì)變得復(fù)雜的多,在這種情況下,mysql會(huì)創(chuàng)建匿名的臨時(shí)表,這種情況下,table列為**derived N**的形式,其中N時(shí)子查詢的id.
 
  當(dāng)有UNION時(shí),UNION RESULT的table列包含一個(gè)參與UNION的id列表,形為**union1,3**
 
  9.type
 
  訪問類型mysql決定如何查找表中的行,從最差到最優(yōu)依次如下:
 
  (1)ALL:全表掃描,通常意味著mysql必須掃描整張表,從頭到尾去找到所需要的行.
 
  (2)index:這和全表掃描一樣,只是mysql在掃描表示按索引次序進(jìn)行而不是行,他的主要優(yōu)點(diǎn)是避免了排序,最大的缺點(diǎn)是承擔(dān)按索引次數(shù)讀取整張表的開銷,如果Extra字段看到Using index,說明Mysql正在使用覆蓋索引,他比按索引次序全表掃描開銷要少得多.
 
  (3)range:范圍掃描就是一個(gè)有限制的索引掃描,它開始于索引的某一點(diǎn),返回匹配這個(gè)值域的行。這比全索引掃描要好一些,因?yàn)樗貌恢闅v全部索引。顯而易見的范圍掃描時(shí)帶有between或者where>,當(dāng)mysql使用索引去查找in()和or時(shí)也會(huì)顯示range。但是這兩者在性能上有很重要的差異。
 
  (4)ref:這是一種索引訪問(索引查找),它返回所有匹配某個(gè)單個(gè)值得行,然而它可能找到多個(gè)符合條件的行,因此它是查找和掃描的混合體,此類索引的掃描只有在使用非唯一索引或者唯一索引的非唯一前綴時(shí)才發(fā)生.
 
  (5)eq_ref:使用這種索引查找,mysql最多只返回一條記錄,這種訪問方法在使用mysql主鍵或者唯一索引查找時(shí)看到,它會(huì)將他們與某個(gè)參考值作比較.
 
  (6)const,system 當(dāng)mysql能夠從某部分進(jìn)行優(yōu)化將其轉(zhuǎn)換為一個(gè)常量時(shí),它就會(huì)使用這些訪問類型,比如如下查詢:explain select id from mis_audit_comment where id = 1/G;
 
  (7)NULL 這種訪問方式意味著Mysql能在優(yōu)化階段分解查詢語句,在執(zhí)行階段甚至用不著訪問表和索引.
 
  10.Extra
 
  記錄了不適合在其他列中顯示的額外信息.
 
  (1)Using index:mysql將使用覆蓋索引,以避免訪問表.
 
  (2)Using where:mysql服務(wù)器將在存儲(chǔ)引擎檢索行后再進(jìn)行過濾.
 
  (3)Using temporary:mysql在對結(jié)果排序時(shí)使用了臨時(shí)表.
 
  (4)Using filesort:表示mysql使用一個(gè)外部索引排序,而不是按索引的順序讀取表.

(編輯:武林網(wǎng))

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 灯塔市| 邓州市| 绥宁县| 宜阳县| 龙川县| 应城市| 酒泉市| 马关县| 长垣县| 集贤县| 广饶县| 南投市| 遂昌县| 黄梅县| 贵南县| 偏关县| 渑池县| 蒙山县| 乌拉特中旗| 黄平县| 卢湾区| 东宁县| 涿鹿县| 渭源县| 余干县| 招远市| 富宁县| 肃北| 贵阳市| 方正县| 本溪| 兴和县| 桃江县| 呈贡县| 博客| 滦平县| 万宁市| 岳阳市| 平定县| 托里县| 雷波县|