了解MySQL執(zhí)行計(jì)劃結(jié)果

本文主要給大家介紹了解MySQL執(zhí)行計(jì)劃結(jié)果,其所涉及的東西,從理論知識(shí)來(lái)獲悉,有很多書籍、文獻(xiàn)可供大家參考,從現(xiàn)實(shí)意義角度出發(fā),創(chuàng)新互聯(lián)累計(jì)多年的實(shí)踐經(jīng)驗(yàn)可分享給大家。

專注于為中小企業(yè)提供網(wǎng)站制作、成都網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)普寧免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了1000+企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

explain結(jié)果說(shuō)明

了解MySQL執(zhí)行計(jì)劃結(jié)果

  • select_type
類型說(shuō)明
SIMPLE簡(jiǎn)單SELECT(不使用UNION或子查詢等)
PRIMARY主查詢,即最外面的SELECT
UNIONUNION中的第二個(gè)或后面的SELECT語(yǔ)句
DEPENDENT UNIONNION中的第二個(gè)或后面的SELECT語(yǔ)句,取決于外面的查詢
UNION RESULTUNION的結(jié)果
SUBQUERY子查詢中的第一個(gè)SELECT
DEPENDENT SUBQUERY子查詢中的第一個(gè)SELECT,取決于外面的查詢
SUBQUERY導(dǎo)出表的SELECT(FROM子句的子查詢)
  • table
    輸出結(jié)果集的表名

  • partitions
    存在分區(qū)時(shí),使用到哪些分區(qū)

  • type
    連接使用了哪種類別,有無(wú)使用索引,是使用Explain命令分析性能瓶頸的關(guān)鍵項(xiàng)之一。常見(jiàn)訪問(wèn)類型如下,按照性能排序,從上到下,從差到好。一般來(lái)說(shuō),得保證查詢至少達(dá)到range級(jí)別,最好能達(dá)到ref,否則就可能會(huì)出現(xiàn)性能問(wèn)題。
類型示例說(shuō)明
ALL全表掃描一般是沒(méi)有where條件或者where條件沒(méi)有使用索引的查詢語(yǔ)句
index索引全掃描一般是查詢的字段都有索引的查詢語(yǔ)句
range索引范圍掃描常用于<、<=、>、>=、between等操作
ref非唯一索引掃描使用非唯一索引或唯一索引的前綴掃描,返回匹配某個(gè)單獨(dú)值的記錄行
eq_ref唯一索引掃描類似ref,區(qū)別在于使用的索引是唯一索引,對(duì)于每個(gè)索引鍵值,表中只有一條記錄匹配
const,system單表最多有一個(gè)匹配行onst/system出現(xiàn)在根據(jù)主鍵primary key或者 唯一索引 unique index 進(jìn)行的查詢
NULL不用掃描表或索引select 1 from dual
  • possible_keys
    列指出MySQL能使用哪個(gè)索引在該表中找到行

  • key
    顯示MySQL實(shí)際決定使用的鍵(索引)。如果沒(méi)有選擇索引,鍵是NULL

  • key_len
    顯示MySQL決定使用的鍵長(zhǎng)度。如果鍵是NULL,則長(zhǎng)度為NULL。使用的索引的長(zhǎng)度。在不損失精確性的情況下,長(zhǎng)度越短越好

  • ref
    顯示使用哪個(gè)列或常數(shù)與key一起從表中選擇行。

  • rows
    顯示MySQL認(rèn)為它執(zhí)行查詢時(shí)必須檢查的行數(shù)。

  • filtered
    存儲(chǔ)引擎返回的數(shù)據(jù)在server層過(guò)濾后,剩下多少滿足查詢的記錄數(shù)量的比例(百分比)

  • extra
    包含MySQL解決查詢的詳細(xì)信息,也是關(guān)鍵參考項(xiàng)之一。
extra元素說(shuō)明
Distinct一旦MYSQL找到了與行相聯(lián)合匹配的行,就不再搜索了
Not existsMYSQL 優(yōu)化了LEFT JOIN,一旦它找到了匹配LEFT JOIN標(biāo)準(zhǔn)的行,就不再搜索了
Rangechecked for each
Record沒(méi)有找到理想的索引,因此對(duì)于從前面表中來(lái)的每一 個(gè)行組合,MYSQL檢查使用哪個(gè)索引,并用它來(lái)從表中返回行。這是使用索引的最慢的連接之一
Using filesort表示MySQL需額外排序操作, 不能通過(guò)索引順序達(dá)到排序效果
Using index表示索引覆蓋,不會(huì)回表查詢
Using temporary通常發(fā)生在對(duì)不同的列集進(jìn)行ORDER BY上,而不是GROUP BY上
Using where表示進(jìn)行了回表查詢

什么是回表

簡(jiǎn)單來(lái)說(shuō)就是數(shù)據(jù)庫(kù)根據(jù)索引找到了指定的記錄所在行后,還需要根據(jù)rowid再次到數(shù)據(jù)塊里取數(shù)據(jù)的操作。比如這樣的執(zhí)行計(jì)劃,先索引掃描,再通過(guò)rowid去取索引中未能提供的數(shù)據(jù),即為回表。“回表”一般就是指執(zhí)行計(jì)劃里顯示的“TABLE ACCESS BY INDEX ROWID”。再例如,雖然只查詢索引里的列,但是需要回表過(guò)濾掉其他行。

怎么避免回表?
將需要的字段放在索引中去。查詢的時(shí)候就能避免回表。但是不要刻意去避免回表,那樣代價(jià)太了。也不是將所有的字段都放在所有中。

回表和MySQL的索引實(shí)現(xiàn)有關(guān)系,有興趣的朋友可以進(jìn)一步了解B+樹相關(guān)原理,參照下面這篇文章“從B樹、B+樹、B*樹談到R 樹”。

MySQL如何獲取rownum

不同于oracle的rownum,mysql不太直接提供這樣的字段,但是可以用變量的方法添加偽自增序列,語(yǔ)法格式為
SELECT @rownum:=@rownum+1 AS rownum, table_name.* FROM (SELECT @rownum:=0) r, table_name ;

看了以上了解MySQL執(zhí)行計(jì)劃結(jié)果介紹,希望能給大家在實(shí)際運(yùn)用中帶來(lái)一定的幫助。本文由于篇幅有限,難免會(huì)有不足和需要補(bǔ)充的地方,大家可以繼續(xù)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊板塊,會(huì)定期給大家更新行業(yè)新聞和知識(shí),如有需要更加專業(yè)的解答,可在官網(wǎng)聯(lián)系我們的24小時(shí)售前售后,隨時(shí)幫您解答問(wèn)題的。

新聞名稱:了解MySQL執(zhí)行計(jì)劃結(jié)果
文章URL:http://bm7419.com/article36/phoopg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、定制網(wǎng)站、全網(wǎng)營(yíng)銷推廣、網(wǎng)站策劃、網(wǎng)站導(dǎo)航、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)