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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

聯(lián)合索引使用規(guī)則

2019-11-08 20:34:09
字體:
供稿:網(wǎng)友

假設(shè)某個(gè)表有一個(gè)聯(lián)合索引(c1,c2,c3,c4)一下——只能使用該聯(lián)合索引的c1,c2,c3部分A where c1=x and c2=x and c4>x and c3=xB where c1=x and c2=x and c4=x order by c3C where c1=x and c4= x group by c3,c2D where c1=? and c5=? order by c2,c3E where c1=? and c2=? and c5=? order by c2,c3有誰知道下面A-E能否可以使用索引!!為什么?
接下來我建表來幫你解答一下哈定義表t,有c1到c5 5個(gè)字段,特別說明一下 字段類型都是定長char(1)類型,并且非空,字符集是utf8(與計(jì)算索引使用字節(jié)數(shù)有關(guān))QQ截圖20131109233034.png 創(chuàng)建聯(lián)合索引QQ截圖20131109234601.png 插入2條測試數(shù)據(jù)QQ截圖20131109234733.png 好,我們先來看A選項(xiàng)QQ截圖20131109234954.png 我們看解析A這條sql的結(jié)果,與索引有關(guān)的主要是possible_keys,key,key_len這三項(xiàng),possible_keys是指可能會(huì)用到的索引,key是當(dāng)前sql使用到的索引,key_len是索引的使用字節(jié)數(shù)key的值是c1234表示聯(lián)合索引用上了,那是不是c1,c2,c3,c4全用上了咧,我們得從key_len分析一下因?yàn)樽侄晤愋褪莄har(1),字符集是utf8,所以每個(gè)字段的key_len 是 1*3=3,key_len現(xiàn)在等于12表示c1,c2,c3,c4這四個(gè)字段都用上了索引,(如果字段類型是null,那單個(gè)字段的索引字節(jié)數(shù)需要 +1,如果字段類型為非定長類型,比如varchar,那字節(jié)數(shù)需要再 +2,這里方便理解,統(tǒng)一定義成了定長char)

再接著看B這條sql語句QQ截圖20131110000049.png 我們看到key=c1234,表示B使用了聯(lián)合索引,key_len=6表示有兩個(gè)字段使用了索引,這兩個(gè)字段就是C1和c2,這個(gè)sql里面有一個(gè)order by c3,order by不能使用索引,但是卻利用了索引,為什么這么說咧,先看C這條sqlQQ截圖20131110000731.png key=c1234,表示B使用了聯(lián)合索引,key_len=3表示有1個(gè)字段使用了索引,這個(gè)字段就是C1,與B語句不一樣的是 Extra的值C語句里面使用了臨時(shí)表(Using temporary) 和 排序(filesort),因?yàn)榻M合索引是需要按順序執(zhí)行的,比如c1234組合索引,要想在c2上使用索引,必須先在c1上使用索引,要想在c3上使用索引,必須先在c2上使用索引,依此。。回到B語句中,因?yàn)閏2字段已經(jīng)使用了索引,所以在order by c3的時(shí)候 c3其實(shí)在索引表里面已經(jīng)是排好序的了,不需要建臨時(shí)表,不需要再排序,所以說其實(shí)他利用上了索引而C語句中,group by 的順序是先c3,再c2,在對c3進(jìn)行g(shù)roup by的時(shí)候,c2字段上的索引并沒用使用,所以索引在這里就斷了,只用上了c1一個(gè)字段的索引
D語句c1字段使用了索引,c2,c3字段在order by中是順序執(zhí)行 所以也利用了索引QQ截圖20131110002133.png E語句c1和c2使用了索引,c3在order by中利用了索引QQ截圖20131110002358.png 

2013-11-10 00:24:19 上傳下載附件 (6.78 KB)


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 腾冲县| 年辖:市辖区| 山西省| 五华县| 寻乌县| 建昌县| 台中市| 沁水县| 定陶县| 榆社县| 武安市| 泸溪县| 新龙县| 固始县| 航空| 迭部县| 雷州市| 广西| 宜丰县| 文安县| 梅河口市| 旌德县| 武宁县| 晴隆县| 延安市| 克山县| 普安县| 遵义市| 松原市| 仁寿县| 福贡县| 黔西| 湾仔区| 密山市| 黎平县| 太原市| 金寨县| 莱西市| 乌拉特后旗| 大安市| 江达县|