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

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

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

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

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

聽(tīng)我給你背一遍八股文!

我: MySQL聯(lián)合索引遵循最左前綴匹配原則,即最左優(yōu)先,查詢(xún)的時(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)。

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

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

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

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

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

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

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

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

我擦,這把我問(wèn)的不自信了。

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

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

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

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

我擦,這叫什么問(wèn)題啊?

什么遵循不遵循?

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

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

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

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

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='用戶(hù)表';

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

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

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

雖然SQL查詢(xún)條件只有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中進(jìn)行跨庫(kù)查詢(xún)的方法示例

    MySQL中進(jìn)行跨庫(kù)查詢(xún)的方法示例

    這篇文章主要給大家介紹了關(guān)于MySQL中進(jìn)行跨庫(kù)查詢(xún)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • MySQL如何清空慢查詢(xún)文件

    MySQL如何清空慢查詢(xún)文件

    這篇文章主要介紹了MySQL如何清空慢查詢(xún)文件,如何在線(xiàn)生成一個(gè)新的慢查詢(xún)文件,感興趣的小伙伴們可以參考一下
    2015-12-12
  • Mysql中批量替換某個(gè)字段的部分?jǐn)?shù)據(jù)(推薦)

    Mysql中批量替換某個(gè)字段的部分?jǐn)?shù)據(jù)(推薦)

    這篇文章主要介紹了Mysql中批量替換某個(gè)字段的部分?jǐn)?shù)據(jù),通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 詳解MySQL的內(nèi)連接和外連接

    詳解MySQL的內(nèi)連接和外連接

    這篇文章主要介紹了詳解MySQL的內(nèi)連接和外連接,mySQL包含兩種聯(lián)接,分別是內(nèi)連接(inner join)和外連接(out join),但我們又同時(shí)聽(tīng)說(shuō)過(guò)左連接,交叉連接等術(shù)語(yǔ),本文就帶大家來(lái)了解一下,需要的朋友可以參考下
    2023-05-05
  • MySQL 8.0新特性 — 檢查性約束的使用簡(jiǎn)介

    MySQL 8.0新特性 — 檢查性約束的使用簡(jiǎn)介

    這篇文章主要介紹了MySQL 8.0新特性 — 檢查性約束的簡(jiǎn)單介紹,幫助大家更好的理解和學(xué)習(xí)使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2021-03-03
  • MySQL Undo Log 配置及參數(shù)優(yōu)化與操作手冊(cè)詳解

    MySQL Undo Log 配置及參數(shù)優(yōu)化與操作手冊(cè)詳解

    不合理的 Undo Log配置會(huì)導(dǎo)致磁盤(pán)空間溢出、并發(fā)性能下降、數(shù)據(jù)泄露等問(wèn)題,本文基于MySQL 8.0+ 版本,詳解Undo Log關(guān)鍵配置參數(shù)、優(yōu)化方案與實(shí)操步驟,感興趣的朋友跟隨小編一起看看吧
    2026-02-02
  • mysql慢查詢(xún)優(yōu)化之從理論和實(shí)踐說(shuō)明limit的優(yōu)點(diǎn)

    mysql慢查詢(xún)優(yōu)化之從理論和實(shí)踐說(shuō)明limit的優(yōu)點(diǎn)

    今天小編就為大家分享一篇關(guān)于mysql慢查詢(xún)優(yōu)化之從理論和實(shí)踐說(shuō)明limit的優(yōu)點(diǎn),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • MySql中的連接查詢(xún)問(wèn)題

    MySql中的連接查詢(xún)問(wèn)題

    這篇文章主要介紹了MySql中的連接查詢(xún)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • mysql如何讓自增id歸0解決方案

    mysql如何讓自增id歸0解決方案

    數(shù)據(jù)庫(kù)的Id自增越來(lái)越大,要讓自增重新從1開(kāi)始:那么就用下面的方法吧
    2012-11-11
  • 如何通過(guò)SQL找出2個(gè)表里值不同的列的方法

    如何通過(guò)SQL找出2個(gè)表里值不同的列的方法

    本篇文章對(duì)如何通過(guò)SQL找出2個(gè)表里值不同的列的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評(píng)論

南投市| 宁海县| 朝阳县| 郁南县| 麻江县| 柘荣县| 容城县| 天等县| 祁连县| 文成县| 赣州市| 星座| 东明县| 隆林| 黄浦区| 华安县| 噶尔县| 平江县| 麻江县| 阜康市| 阿克陶县| 海安县| 略阳县| 确山县| 通榆县| 普定县| 全椒县| 宜昌市| 通化县| 满洲里市| 衡山县| 梧州市| 同仁县| 武隆县| 分宜县| 大洼县| 仙游县| 秭归县| 阜阳市| 怀宁县| 卢龙县|