IT培訓(xùn)網(wǎng)
IT在線學(xué)習(xí)
在我的上一篇文章《功能測試也可以發(fā)現(xiàn)數(shù)據(jù)庫相關(guān)的性能問題》中提到,通過SQL語句的執(zhí)行計(jì)劃可以斷定一些語句肯定有性能問題,今天再寫一篇文章,介紹一下執(zhí)行計(jì)劃中索引使用的情況。
執(zhí)行explain之后結(jié)果集包含如下信息:
possible_keys:指出MySQL能使用哪個(gè)索引在表中找到記錄,查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢使用(該查詢可以利用的索引,如果沒有任何索引顯示NULL)
key:顯示MySQL實(shí)際決定使用的鍵(索引),一般會情況會包含在possible_keys中,如果沒有選擇索引,鍵是NULL。
possible_keys和key產(chǎn)生的情況可能有以下幾種:
1)possible_keys有多個(gè)值,key得值為possible_keys中的一個(gè)。
2)possible_keys有一個(gè)值,key的值和possible_keys中的值相同。
3)possible_keys有一個(gè)或多個(gè)值,但key為NULL。
4)possible_keys為NULL,但key有值。
5)possible_keys和key都為NULL。
下面我們分別來看下各種情況。
1. possible_keys有多個(gè)值,key得值為possible_keys中的一個(gè)。
這種情況比較常見,因?yàn)槊織lsql最多只能用到一個(gè)索引。下面的例子我們在col1字段上創(chuàng)建了一個(gè)單獨(dú)索引和一個(gè)復(fù)合索引,所以possible_keys有兩個(gè),但key只有一個(gè)。
2. possible_keys有一個(gè)值,key的值和possible_keys中的值相同。在上面的基礎(chǔ)上,我們刪掉任意一個(gè)索引。結(jié)果如下:
3. possible_keys有一個(gè)或多個(gè)值,但key為NULL。下圖中,因?yàn)閏ol1為varchar類型,但是查詢的時(shí)候沒有加上引號
4. possible_keys為NULL,但key有值。這種一般是引用了覆蓋索引的情況,col1,col2和col3兩列加過聯(lián)合索引,select的字段不是*,而是col1和col2,所以結(jié)果只會出現(xiàn)在key這一列中。
5. possible_keys和key都為NULL,我們直接看下面的例子
>>本文地址:http://m.yiyunku.cn/zhuanye/2021/68696.html
聲明:本站稿件版權(quán)均屬中公教育優(yōu)就業(yè)所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
1 您的年齡
2 您的學(xué)歷
3 您更想做哪個(gè)方向的工作?