最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2021年06月23日 09:30:57   作者:有種放學(xué)你別走  
本文主要介紹了mysql聯(lián)合索引的具體使用,結(jié)合實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

聯(lián)合索引又叫復(fù)合索引。對(duì)于復(fù)合索引:Mysql從左到右的使用索引中的字段,一個(gè)查詢可以只使用索引中的一部份,但只能是最左側(cè)部分。例如索引是key index (a,b,c). 可以支持a | a,b| a,b,c 3種組合進(jìn)行查找,但不支持 b,c進(jìn)行查找 .當(dāng)最左側(cè)字段是常量引用時(shí),索引就十分有效。

從一道有趣的題目開始分析:

假設(shè)某個(gè)表有一個(gè)聯(lián)合索引(c1,c2,c3,c4)以下選項(xiàng)哪些字段使用了該索引:
A where c1=x and c2=x and c4>x and c3=x
B where c1=x and c2=x and c4=x order by c3
C where c1=x and c4= x group by c3,c2
D where c1=? and c5=? order by c2,c3
E where c1=? and c2=? and c5=? order by c2,c3

下面我們開始:

首先創(chuàng)建表:

CREATE TABLE t(
c1 CHAR(1) not null,
c2 CHAR(1) not null,
c3 CHAR(1) not null,
c4 CHAR(1) not null,
c5 CHAR(1) not null
)ENGINE myisam CHARSET UTF8;


有c1到c5 5個(gè)字段,特別說(shuō)明一下 字段類型都是定長(zhǎng)char(1)類型,并且非空,字符集是utf8(與計(jì)算索引使用字節(jié)數(shù)有關(guān))

創(chuàng)建索引:

alter table t add index c1234(c1,c2,c3,c4);

插入2條數(shù)據(jù):insert into t VALUES('1','1','1','1','1'),('2','2','2','2','2')

使用MySql Explain開始分析題目結(jié)果:

A選項(xiàng):


結(jié)果可以看出,c1,c2,c3,c4均使用到了該索引,而我們對(duì)A結(jié)果稍作更改:

將c2條件去掉后:


根據(jù)索引最左原則,c2字段沒有使用索引,c2之后的字段都不能使用索引。下面2圖我們對(duì)比下索引最左原則:


上圖結(jié)果顯示直接使用c3是全表查詢,無(wú)法使用該索引的,所以c3字段使用索引的前提是c1,c2兩字段均使用了索引。

即是索引的最左原則(左前綴原則)。

B選項(xiàng):


key_len長(zhǎng)度說(shuō)明c1,c2字段用到了該索引,Extra顯示并沒有使用臨時(shí)表進(jìn)行排序,說(shuō)明排序是使用了索引的,但并沒有計(jì)算在key_len值中,也沒有起到連接c4的作用,說(shuō)明索引到c3這里是斷掉的。

排序其實(shí)是利用聯(lián)合索引直接完成了的,即:使用了c1234聯(lián)合索引,就已經(jīng)使得c1下c2,c2下c3,c3下c4是有序的了,所以實(shí)際是排序利用了索引,c3字段并沒有使用該索引。(這段寫的時(shí)候總感覺有點(diǎn)別扭,不知道我理解的對(duì)不對(duì),還有待更深層次的研究)

C選項(xiàng):


使用group by 一般先生成臨時(shí)文件,再進(jìn)行排序,但是字段順序?yàn)閏2,c3時(shí),并沒有用臨時(shí)表進(jìn)行排序,而是利用索引排序好的;當(dāng)group by字段為c3,c2時(shí),由于與索引字段順序不一致,所以分組和排序并沒有利用到索引。

由key_len長(zhǎng)度確定,只有c1一個(gè)字段使用了索引。

D選項(xiàng):


order by 和group by 類似,字段順序與索引一致時(shí),會(huì)使用索引排序;字段順序與索引不一致時(shí),不使用索引。

由key_len長(zhǎng)度確定,只有c1一個(gè)字段使用了索引。

E選項(xiàng):


其實(shí)選項(xiàng)E的結(jié)果分析在上述ABCD的結(jié)果中都分析過(guò)了,這里只有c1,c2字段使用了該索引。

綜上所述問題答案:

A:四個(gè)字段均使用了該索引

B:c1,c2字段使用了該索引

C:c1字段使用該索引

D:c1字段使用該索引

E:c1,c2字段使用了該索引

總結(jié):

索引的最左原則(左前綴原則),如(c1,c2,c3,c4....cN)的聯(lián)合索引,where 條件按照索引建立的字段順序來(lái)使用(不代表and條件必須按照順序來(lái)寫),如果中間某列沒有條件,或使用like會(huì)導(dǎo)致后面的列不能使用索引。

索引也能用于分組和排序,分組要先排序,在計(jì)算平均值等等。所以在分組和排序中,如果字段順序可以按照索引的字段順序,即可利用索引的有序特性。

到此這篇關(guān)于mysql聯(lián)合索引的使用規(guī)則的文章就介紹到這了,更多相關(guān)mysql聯(lián)合索引內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Sphinx/MySQL 協(xié)議支持與SphinxQL應(yīng)用實(shí)例

    Sphinx/MySQL 協(xié)議支持與SphinxQL應(yīng)用實(shí)例

    Sphinx/MySQL 協(xié)議支持與SphinxQL應(yīng)用例子,供大家學(xué)習(xí)參考
    2013-02-02
  • mysql之key和index的區(qū)別及創(chuàng)建刪除索引方式

    mysql之key和index的區(qū)別及創(chuàng)建刪除索引方式

    這篇文章主要介紹了mysql之key和index的區(qū)別及創(chuàng)建刪除索引方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • MySQL on k8s 云原生環(huán)境部署

    MySQL on k8s 云原生環(huán)境部署

    這篇文章主要為大家介紹了MySQL on k8s 云原生環(huán)境部署實(shí)現(xiàn)過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • MySQL中的join以及on條件的用法解析

    MySQL中的join以及on條件的用法解析

    這篇文章主要介紹了MySQL中的join以及on條件的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • MySQL使用索引合并(Index?Merge)提高查詢效率

    MySQL使用索引合并(Index?Merge)提高查詢效率

    本文介紹了索引合并(Index?Merge)的實(shí)現(xiàn)原理、場(chǎng)景約束與通過(guò)案例驗(yàn)證的優(yōu)缺點(diǎn),在實(shí)際使用中,當(dāng)查詢條件列較多且無(wú)法使用聯(lián)合索引時(shí),就可以考慮使用索引合并,利用多個(gè)索引加速查詢,但要注意,索引合并并非在任何場(chǎng)景下均具有較好的效果,需要結(jié)合具體情況選擇
    2024-07-07
  • MySql基本查詢之表的增刪查改+聚合函數(shù)案例詳解

    MySql基本查詢之表的增刪查改+聚合函數(shù)案例詳解

    本文詳解SQL的CURD操作INSERT用于數(shù)據(jù)插入(單行/多行及沖突處理),SELECT實(shí)現(xiàn)數(shù)據(jù)檢索(列選擇、條件過(guò)濾、排序分頁(yè)),UPDATE修改數(shù)據(jù),DELETE刪除數(shù)據(jù)并對(duì)比TRUNCATE,涵蓋聚合函數(shù)、GROUP BY分組統(tǒng)計(jì)及經(jīng)典練習(xí)題,強(qiáng)調(diào)操作注意事項(xiàng)與執(zhí)行順序,感興趣的朋友一起看看吧
    2025-07-07
  • 從MySQL5.7平滑升級(jí)到MySQL8.0數(shù)據(jù)庫(kù)的最佳實(shí)踐教程

    從MySQL5.7平滑升級(jí)到MySQL8.0數(shù)據(jù)庫(kù)的最佳實(shí)踐教程

    這篇文章主要給大家介紹了關(guān)于從MySQL5.7平滑升級(jí)到MySQL8.0數(shù)據(jù)庫(kù)的最佳實(shí)踐,升級(jí)MySQL版本需要進(jìn)行一系列操作,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • MySql恢復(fù)數(shù)據(jù)方法梳理講解

    MySql恢復(fù)數(shù)據(jù)方法梳理講解

    MySQL的binlog日志是MySQL日志中非常重要的一種日志,下面這篇文章主要給大家介紹了關(guān)于mysql如何利用binlog進(jìn)行數(shù)據(jù)恢復(fù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • MySQL數(shù)值類型溢出的處理方法

    MySQL數(shù)值類型溢出的處理方法

    這篇文章主要給大家介紹了關(guān)于MySQL數(shù)值類型溢出的處理方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Mysql如何導(dǎo)出篩選數(shù)據(jù)并導(dǎo)出帶表頭的csv文件

    Mysql如何導(dǎo)出篩選數(shù)據(jù)并導(dǎo)出帶表頭的csv文件

    這篇文章主要介紹了Mysql如何導(dǎo)出篩選數(shù)據(jù)并導(dǎo)出帶表頭的csv文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評(píng)論

靖西县| 长顺县| 临清市| 凯里市| 南充市| 洪雅县| 玉山县| 广宗县| 洞头县| 榆树市| 长沙市| 金溪县| 崇州市| 太仆寺旗| 尤溪县| 曲阜市| 浦县| 金阳县| 南昌县| 栾城县| 巨鹿县| 长泰县| 玉树县| 吉安市| 眉山市| 渭源县| 武平县| 吴旗县| 泽普县| 闽侯县| 乐山市| 南充市| 鹤庆县| 南江县| 乃东县| 景泰县| 乳山市| 红安县| 宜黄县| 沙洋县| 建湖县|