MySQL explain命令實(shí)操

explain作用

explain命令是用來(lái)查看一個(gè)sql語(yǔ)句的執(zhí)行計(jì)劃狡赐,可以看出這個(gè)sql語(yǔ)句是否使用到索引坟冲,是否合理可用脐彩。

explain返回參數(shù)說(shuō)明

  1. 作用于一個(gè)select sql語(yǔ)句:
explain select id from tb_delivery_user_owner where user_id=1;

得到如下圖結(jié)果:


image.png

2.作用于一個(gè)update sql:

explain update tb_delivery_user_owner set deleted = 0 where   delivery_user_id=1;
image.png

重點(diǎn)解釋以下幾個(gè)字段:

type:這是重要的列惋鹅,顯示連接使用了何種類(lèi)型。從最好到最差的連接類(lèi)型為const悔据、eq_reg怎燥、ref、range蜜暑、index和ALL
type顯示的是訪問(wèn)類(lèi)型,是較為重要的一個(gè)指標(biāo)策肝,結(jié)果值從好到壞依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL ,一般來(lái)說(shuō)肛捍,得保證查詢(xún)至少達(dá)到range級(jí)別,最好能達(dá)到ref之众。具體說(shuō)明拙毫,如下圖:


image.png

key: 實(shí)際使用的索引。如果為NULL棺禾,則沒(méi)有使用索引缀蹄。很少的情況下,MySQL會(huì)選擇優(yōu)化不足的索引。這種情況下缺前,可以在select語(yǔ)句中使用use index(indexname) 來(lái)強(qiáng)制使用一個(gè)索引或者用ignore index(indexname) 來(lái)強(qiáng)制MySQL忽略索引

key_len:使用的索引的長(zhǎng)度蛀醉。在不損失精確性的情況下,長(zhǎng)度越短越好衅码;也可以根據(jù)這個(gè)長(zhǎng)度判斷組合索引是用了部分字段還是所有字段拯刁。

ref:顯示索引的哪一列被使用了,如果可能的話(huà)逝段,是一個(gè)常數(shù)

rows:預(yù)計(jì)查詢(xún)掃描的數(shù)據(jù)行數(shù)

Extra:關(guān)于MySQL如何解析查詢(xún)的附加信息,如下圖所示:


image.png

explain實(shí)操

CREATE TABLE `tb_delivery_user_owner` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `delivery_user_id` int(11) NOT NULL COMMENT '投放賬號(hào)ID',
  `user_id` int(11) NOT NULL COMMENT '使用者用戶(hù)ID',
  `deleted` tinyint(1) NOT NULL DEFAULT '0',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq_idx_delivery_owner` (`delivery_user_id`,`user_id`),
  KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='投放賬號(hào)使用者表';

從建表sql知道表tb_delivery_user_owner有一個(gè)組合唯一索引uniq_idx_delivery_owner垛玻,索引的第一個(gè)字段為delivery_user_id,第二字段為user_id奶躯。

  1. 先看第一個(gè)sql語(yǔ)句:


    image.png

    顯然使用了索引:uniq_idx_delivery_owner帚桩,type=const表明基于索引查詢(xún),key_len=8說(shuō)明使用了完整的2個(gè)列嘹黔。

  2. 然后看第二個(gè)sql:


    image.png

似乎也用到了索引账嚎,但是根據(jù)最左匹配原則,user_id作為第二個(gè)字段應(yīng)該用不到索引参淹。這是什么原因呢醉锄?最左匹配原則在這里不適用了嗎?

解釋?zhuān)?strong>這里是使用到索引浙值,但是type=index說(shuō)明是索引覆蓋掃描恳不,需要掃描整個(gè)索引表,實(shí)際上效果并不好开呐。根據(jù)最左匹配原則烟勋,user_id不滿(mǎn)足,但是它在組合索引列里筐付,所以直接查所有的索引卵惦。

接下來(lái)看下如果select的列不一樣是否有什么不同:


image.png

從圖上看到create_time字段不是索引列,當(dāng)它被select的時(shí)候直接就是全表掃描了瓦戚,這是因?yàn)閏reate_time不在索引表中沮尿,不能查索引表只能原表掃描〗辖猓可見(jiàn)查詢(xún)sql中畜疾,除了where條件外select的具體列也會(huì)有影響最終執(zhí)行性能。

總結(jié)

  1. explain用于查看sql執(zhí)行計(jì)劃印衔,可以分析是否用到索引啡捶,便于優(yōu)化sql
  2. explain的結(jié)果除了和where條件有關(guān),還和select的列有關(guān)奸焙。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瞎暑,一起剝皮案震驚了整個(gè)濱河市彤敛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌了赌,老刑警劉巖墨榄,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異揍拆,居然都是意外死亡渠概,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)嫂拴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)播揪,“玉大人,你說(shuō)我怎么就攤上這事筒狠≈肀罚” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵辩恼,是天一觀的道長(zhǎng)雇庙。 經(jīng)常有香客問(wèn)我,道長(zhǎng)灶伊,這世上最難降的妖魔是什么疆前? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮聘萨,結(jié)果婚禮上竹椒,老公的妹妹穿的比我還像新娘。我一直安慰自己米辐,他們只是感情好胸完,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著翘贮,像睡著了一般赊窥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狸页,一...
    開(kāi)封第一講書(shū)人閱讀 51,718評(píng)論 1 305
  • 那天锨能,我揣著相機(jī)與錄音,去河邊找鬼芍耘。 笑死腹侣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的齿穗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼饺律,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼窃页!你這毒婦竟也來(lái)了跺株?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤脖卖,失蹤者是張志新(化名)和其女友劉穎乒省,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體畦木,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡袖扛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了十籍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蛆封。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖勾栗,靈堂內(nèi)的尸體忽然破棺而出惨篱,到底是詐尸還是另有隱情,我是刑警寧澤围俘,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布砸讳,位于F島的核電站,受9級(jí)特大地震影響界牡,放射性物質(zhì)發(fā)生泄漏簿寂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一宿亡、第九天 我趴在偏房一處隱蔽的房頂上張望常遂。 院中可真熱鬧,春花似錦她混、人聲如沸烈钞。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)毯欣。三九已至,卻和暖如春臭脓,著一層夾襖步出監(jiān)牢的瞬間酗钞,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工来累, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留砚作,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓嘹锁,卻偏偏與公主長(zhǎng)得像葫录,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子领猾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容