欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL聯(lián)合索引遵循最左前綴匹配原則

 更新時(shí)間:2022年08月16日 09:51:54   作者:???????一燈架構(gòu)  
這篇文章主要介紹了MySQL聯(lián)合索引遵循最左前綴匹配原則,?MySQL聯(lián)合索引遵循最左前綴匹配原則,即最左優(yōu)先,查詢的時(shí)候會(huì)優(yōu)先匹配最左邊的索引

面試官: 我看你的簡(jiǎn)歷上寫著精通MySQL,問你個(gè)簡(jiǎn)單的問題,MySQL聯(lián)合索引有什么特性?

心想,這還不簡(jiǎn)單,這不是問到我手心里了嗎?

聽我給你背一遍八股文!

我: MySQL聯(lián)合索引遵循最左前綴匹配原則,即最左優(yōu)先,查詢的時(shí)候會(huì)優(yōu)先匹配最左邊的索引。

例如當(dāng)我們?cè)?nbsp;(a,b,c) 三個(gè)字段上創(chuàng)建聯(lián)合索引時(shí),實(shí)際上是創(chuàng)建了三個(gè)索引,分別是(a)、(a,b)、(a,b,c)。

查詢條件中包含這些索引的時(shí)候,查詢就會(huì)用到索引。例如下面的查詢條件,就可以用到索引:

select * from table_name where a=?;
select * from table_name where a=? and b=?;
select * from table_name where a=? and b=? and c=?;

其他查詢條件不包含這些索引的語(yǔ)句,就不會(huì)用到索引,例如:

select * from table_name where b=?;
select * from table_name where c=?;
select * from table_name where b=? and c=?;

如果查詢條件包含(a,c),也會(huì)用到索引,相當(dāng)于用到了(a)索引。

面試官: 小伙子,你的八股文背的挺熟啊。

我: 也沒有辣,我只是平常熱愛學(xué)習(xí)知識(shí),經(jīng)常做一些總結(jié)匯總,所以就脫口而出了。

面試官: 別開染坊了,我再問你,MySQL聯(lián)合索引一定遵循最左前綴匹配原則嗎?

我擦,這把我問的不自信了。

我: 嗯,MySQL聯(lián)合索引可能有時(shí)候不遵循最左前綴匹配原則。

面試官: 什么時(shí)候遵循?什么時(shí)候不遵循?

我: 可能是晴天遵循,下雨了就不遵循了,每個(gè)月那幾天不舒服的時(shí)候也不遵循了……

面試官: 今天面試就到這吧,你先回去等通知,有后續(xù)消息會(huì)聯(lián)系你的。

我擦,這叫什么問題啊?

什么遵循不遵循?

難道是面試官跟我背的八股文不是同一套?

回去到MySQL官網(wǎng)上翻了一下,才發(fā)現(xiàn)面試官想問的是索引跳躍掃描(Index Skip Scan) 。

MySQL8.0版本開始增加了索引跳躍掃描的功能,當(dāng)?shù)谝涣兴饕奈ㄒ恢递^少時(shí),即使where條件沒有第一列索引,查詢的時(shí)候也可以用到聯(lián)合索引。

造點(diǎn)數(shù)據(jù)驗(yàn)證一下,先創(chuàng)建一張用戶表:

CREATE TABLE `user` (
 ?`id` int NOT NULL AUTO_INCREMENT COMMENT '主鍵',
 ?`name` varchar(255) NOT NULL COMMENT '姓名',
 ?`gender` tinyint NOT NULL COMMENT '性別',
 ?PRIMARY KEY (`id`),
 ?KEY `idx_gender_name` (`gender`,`name`)
) ENGINE=InnoDB COMMENT='用戶表';

在性別和姓名兩個(gè)字段上(gender,name)建立聯(lián)合索引,性別字段只有兩個(gè)枚舉值。

執(zhí)行SQL查詢驗(yàn)證一下:

explain select * from user where name='一燈';

雖然SQL查詢條件只有name字段,但是從執(zhí)行計(jì)劃中看到依然是用了聯(lián)合索引。

并且Extra列中顯示增加了Using index for skip scan,表示用到了索引跳躍掃描的優(yōu)化邏輯。

具體優(yōu)化方式,就是匹配的時(shí)候遇到第一列索引就跳過(guò),直接匹配第二列索引的值,這樣就可以用到聯(lián)合索引了。

其實(shí)我們優(yōu)化一下SQL,把第一列的所有枚舉值加到where條件中,也可以用到聯(lián)合索引:

select * from user where gender in (0,1) and name='一燈';

看來(lái)還是需要經(jīng)常更新自己的知識(shí)體系,一不留神就out了!

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

相關(guān)文章

  • 深入研究mysql中的varchar和limit(容易被忽略的知識(shí))

    深入研究mysql中的varchar和limit(容易被忽略的知識(shí))

    這篇文章主要介紹了深入研究mysql中的varchar和limit(容易被忽略的知識(shí)),本文探究了varchar(5)可以存儲(chǔ)多少個(gè)漢字、多少個(gè)字母數(shù)字和mysql中的limit你真的會(huì)用嗎兩個(gè)知識(shí)點(diǎn),需要的朋友可以參考下
    2015-03-03
  • MySQL最大連接數(shù)max_connections設(shè)置的兩種方法

    MySQL最大連接數(shù)max_connections設(shè)置的兩種方法

    MySQL的最大連接數(shù)可以通過(guò)兩種方法進(jìn)行設(shè)置,通過(guò)命令行臨時(shí)修改和通過(guò)配置文件永久修改這兩種方法,本文將通過(guò)代碼示例給大家詳細(xì)的講解一下這兩種方法,需要的朋友可以參考下
    2024-05-05
  • MySQL死鎖檢查處理的正常方法

    MySQL死鎖檢查處理的正常方法

    這篇文章主要給大家介紹了關(guān)于MySQL死鎖檢查處理的正常方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • MYSQL數(shù)據(jù)庫(kù)連接池及常見參數(shù)調(diào)優(yōu)方式

    MYSQL數(shù)據(jù)庫(kù)連接池及常見參數(shù)調(diào)優(yōu)方式

    這篇文章主要介紹了MYSQL數(shù)據(jù)庫(kù)連接池及常見參數(shù)調(diào)優(yōu)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • MySQL錯(cuò)誤代碼大全

    MySQL錯(cuò)誤代碼大全

    本章列出了當(dāng)你用任何主機(jī)語(yǔ)言調(diào)用MySQL時(shí)可能出現(xiàn)的錯(cuò)誤。首先列出了服務(wù)器錯(cuò)誤消息。其次列出了客戶端程序消息
    2014-01-01
  • 關(guān)于MySQL的索引之最左前綴優(yōu)化詳解

    關(guān)于MySQL的索引之最左前綴優(yōu)化詳解

    這篇文章主要介紹了關(guān)于MySQL的索引之最左前綴優(yōu)化詳解,多個(gè)普通字段組合在一起創(chuàng)建的索引叫做聯(lián)合索引, 也被稱之為組合索引,需要的朋友可以參考下
    2023-05-05
  • MySQL主從復(fù)制的原理圖解及Java語(yǔ)言示例使用

    MySQL主從復(fù)制的原理圖解及Java語(yǔ)言示例使用

    這篇文章主要介紹了MySQL的主從復(fù)制原理詳細(xì)分析,讀寫分離是基于主從復(fù)制來(lái)實(shí)現(xiàn)的。文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • MySQL常見錯(cuò)誤有哪些_MySQL常見錯(cuò)誤的快速解決方法

    MySQL常見錯(cuò)誤有哪些_MySQL常見錯(cuò)誤的快速解決方法

    MySQL常見錯(cuò)誤有哪些呢?下面小編就為大家?guī)?lái)一篇MySQL常見錯(cuò)誤的快速解決方法?,F(xiàn)在分享個(gè)大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-03-03
  • MySQL兩種臨時(shí)表的用法詳解

    MySQL兩種臨時(shí)表的用法詳解

    這篇文章主要介紹了MySQL兩種臨時(shí)表的用法詳解,.內(nèi)容比較詳細(xì),這里分享給大家,供大家參考,學(xué)習(xí)。
    2017-10-10
  • MySQL5.7并行復(fù)制原理及實(shí)現(xiàn)

    MySQL5.7并行復(fù)制原理及實(shí)現(xiàn)

    MySQL 5.7并行復(fù)制的思想簡(jiǎn)單易懂,本文就詳細(xì)的介紹了MySQL5.7并行復(fù)制原理及實(shí)現(xiàn),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06

最新評(píng)論