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

驗(yàn)證Mysql中聯(lián)合索引的最左匹配原則詳情

 更新時(shí)間:2022年08月02日 11:06:47   作者:土圭垚墝???????  
這篇文章主要介紹了驗(yàn)證Mysql中聯(lián)合索引的最左匹配原則詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

前言

后端面試中一定是必問mysql的,在以往的面試中好幾個(gè)面試官都反饋我Mysql基礎(chǔ)不行,今天來(lái)著重復(fù)習(xí)一下自己的弱點(diǎn)知識(shí)。在Mysql調(diào)優(yōu)中索引優(yōu)化又是非常重要的方法,不管公司的大小只要后端項(xiàng)目中用到了mysql,幾乎都會(huì)遇到Mysql查詢需要優(yōu)化的需求。經(jīng)常有時(shí)候前端業(yè)務(wù)沒有壓力,經(jīng)常會(huì)在管理后臺(tái)邏輯中遇到mysql統(tǒng)計(jì)查詢壓力,可能是代碼寫太爛了,哈哈。在日常工作中我遇到過同事建立索引后問我某個(gè)查詢條件是否能命中索引,我只能說(shuō)模糊記得最左匹配原則不能準(zhǔn)確地告訴別人是否能命中索引,我今天就打算徹底解決這個(gè)問題。

如何驗(yàn)證聯(lián)合索引的有效性

使用explain,在select語(yǔ)句之前使用explain關(guān)鍵字,就會(huì)返回sql語(yǔ)句執(zhí)行計(jì)劃的信息,而不是執(zhí)行sql。

這里我們簡(jiǎn)單實(shí)踐一下,選取一張表:

 有興趣的同學(xué)可以拿這個(gè)sql語(yǔ)句生成一個(gè)一模一樣的表:

CREATE TABLE `videos` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `path` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `user` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
  `like` int DEFAULT NULL,
  `unlike` int DEFAULT NULL,
  `status` tinyint(1) DEFAULT NULL,
  `count` int DEFAULT '0',
  `type` tinyint DEFAULT '1' COMMENT '1美女2勵(lì)志',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=36247 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

這個(gè)表的內(nèi)容是一些抖音的視頻的視頻名稱,作者,保存路徑,狀態(tài)等等信息。
來(lái)使用explain關(guān)鍵字試一下執(zhí)行以下sql語(yǔ)句:

explain select * from videos where `user` like'%BY2girl%'

展示信息: 

 其中展示的詳細(xì)信息根據(jù)文章主題這里不做詳細(xì)說(shuō)明吧,就算根據(jù)其他資料稍微理解復(fù)制過來(lái),我也記不住。

接下來(lái)我嘗試把這個(gè)user這個(gè)加一個(gè)索引試試:

 這里補(bǔ)充說(shuō)明一下,我直接新建一個(gè)B樹索引,B樹索引一般是默認(rèn)創(chuàng)建的索引類型,因?yàn)?code>相對(duì)于哈希索引B樹索引可以獲得穩(wěn)定且較好的查詢速度,哈希索引更適合適合做精確查詢

看看不加索引和加索引同一個(gè)查詢的explain有什么區(qū)別:

explain  select count(*) from videos where `user` like'%BY2girl%';

可以看到key關(guān)鍵字那一列使用到了我自己命名的user_key這個(gè)索引

多個(gè)單一索引進(jìn)行驗(yàn)證

接下再加兩個(gè)索引:

看下簡(jiǎn)單使用哪些查詢會(huì)命中索引:

explain  select * from videos where `user` ='BY2' and `path` = 'BY2' and `name`  = 'BY2'

 果然使用到了3個(gè)索引,但是我一直有一個(gè)疑問,在中間的查詢條件使用like模糊返回查詢,看看命中了哪個(gè)索引:

explain  select * from videos where `user` ='BY2' and `path` like '%BY2%' and `name`  = 'BY2'

結(jié)論Mysql會(huì)自動(dòng)對(duì)sql語(yǔ)句進(jìn)行優(yōu)化,把可以命中的查詢條件放在最前面讓它們命中索引,用來(lái)提高查詢速度。這樣一個(gè)字段增加一個(gè)索引無(wú)疑增加了表的空間,給表記錄的新增和修改操作增加了壓力,聯(lián)合索引可以稍微解決這個(gè)問題,接下來(lái)就要說(shuō)聯(lián)合索引。

聯(lián)合索引

聯(lián)合索引指的是對(duì)一張表上把多個(gè)字段當(dāng)制作成一個(gè)索引:

聯(lián)合最左匹配原則解釋:以建立索引的字段為查詢條件,執(zhí)行查詢時(shí)候左邊的為起點(diǎn)任何連續(xù)的索引都能匹配上,當(dāng)遇到范圍查詢(>、<、between、like)就會(huì)停止匹配

explain  select * from videos where `user` ='BY2' and `path` = 'BY2' and `name`  = 'BY2'

g

 不用說(shuō),這樣一定會(huì)命中這個(gè)聯(lián)合索引,接下來(lái)中間使用一個(gè)like試試:

explain  select * from videos where `user` ='BY2' and `path` like '%BY2%' and `name`  = 'BY2'

 完全沒有命中索引,中間被打斷了,我自己以為會(huì)命中了一個(gè)user也會(huì)命中整個(gè)聯(lián)合索引,我還以為mysql會(huì)把nameuser兩個(gè)字段優(yōu)化在最前面實(shí)現(xiàn)最左原則從而命中整個(gè)聯(lián)合索引,學(xué)到了,接下來(lái)把這個(gè)like查詢放在最后:

explain  select * from videos where `user` ='BY2' and `path` = 'BY2' and `name`  like '%BY2%'

 看來(lái)是命中了這個(gè)聯(lián)合索引,兩個(gè)索引的命中直接命中了整個(gè)聯(lián)合索引,驗(yàn)證成功。

在其中側(cè)面了解到,我設(shè)置索引的順序和最左匹配原則的順序不是一一匹配的,userpath這兩個(gè)字段可能會(huì)優(yōu)化順序。但是我設(shè)置的聯(lián)合索引的順序是pathnameuser,其中userpath中間有一個(gè)name字段的索引,最左匹配原則是依據(jù)查詢條件來(lái)的,跟where 條件順序相關(guān)!

總結(jié)

在日常工作中發(fā)現(xiàn)阿里云的云數(shù)據(jù)庫(kù)會(huì)根據(jù)數(shù)據(jù)庫(kù)熱點(diǎn)查詢數(shù)據(jù)自動(dòng)增加索引,又減輕了某些不會(huì)建立索引的人的壓力或者減少了建立錯(cuò)誤索引的情況,同時(shí)自動(dòng)減少了數(shù)據(jù)庫(kù)壓力,哈哈。 索引是mysql非常復(fù)雜的知識(shí),它又非常重要,后面遇到問題一定要記錄下來(lái),親自實(shí)踐增加印象,感覺在今天的驗(yàn)證過程中略過了好多復(fù)雜的知識(shí),例如一些explain信息的意思,很重要,等到后面遇到了再仔細(xì)研究,今天就到這。

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

相關(guān)文章

  • 深入sql多表差異化聯(lián)合查詢的問題詳解

    深入sql多表差異化聯(lián)合查詢的問題詳解

    本篇文章是對(duì)sql多表差異化聯(lián)合查詢的問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL分區(qū)表的詳細(xì)介紹

    MySQL分區(qū)表的詳細(xì)介紹

    當(dāng)設(shè)計(jì)MySQL分區(qū)表時(shí),需要考慮以下幾個(gè)方面,分區(qū)策略、分區(qū)字段、分區(qū)數(shù)量和分區(qū)函數(shù),本文就來(lái)介紹一下MySQL分區(qū)表,感興趣的可以了解一下
    2023-10-10
  • MySQL自定義序列數(shù)的實(shí)現(xiàn)方式

    MySQL自定義序列數(shù)的實(shí)現(xiàn)方式

    這篇文章主要介紹了MySQL自定義序列數(shù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Mysql中的SQL約束Constraint有哪幾種

    Mysql中的SQL約束Constraint有哪幾種

    這篇文章主要介紹了Mysql中的SQL約束Constraint有哪幾種,約束是為了使表中的數(shù)據(jù)有效,常見的約束有非空約束、唯一性約束、主鍵約束、外鍵約束、檢查約束,需要的朋友可以參考下
    2024-01-01
  • Mysql 開啟Federated引擎的方法

    Mysql 開啟Federated引擎的方法

    FEDERATED是其中一個(gè)專門針對(duì)遠(yuǎn)程數(shù)據(jù)庫(kù)的實(shí)現(xiàn)。一般情況下在本地?cái)?shù)據(jù)庫(kù)中建表會(huì)在數(shù)據(jù)庫(kù)目錄中生成相應(yīng)的表定義文件,并同時(shí)生成相應(yīng)的數(shù)據(jù)文件
    2012-12-12
  • MySQL全文索引在數(shù)據(jù)庫(kù)中的應(yīng)用和優(yōu)勢(shì)(模糊查詢不用like+%)

    MySQL全文索引在數(shù)據(jù)庫(kù)中的應(yīng)用和優(yōu)勢(shì)(模糊查詢不用like+%)

    全文索引技術(shù)可以有效地從大量文本中檢索信息,適用于搜索引擎和電商平臺(tái)等場(chǎng)景,InnoDB從MySQL5.6開始支持全文索引,使用倒排索引實(shí)現(xiàn),全文檢索分為自然語(yǔ)言搜索、布爾搜索和查詢擴(kuò)展搜索三種模式,全文索引提高了模糊查詢的效率,優(yōu)化了基于文本的搜索查詢
    2024-09-09
  • 解析MySQL?join查詢的原理

    解析MySQL?join查詢的原理

    這篇文章主要介紹了MySQL?join查詢的原理,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • Navicat查詢結(jié)果不能修改的原因及解決方法

    Navicat查詢結(jié)果不能修改的原因及解決方法

    下面小編就為大家?guī)?lái)一篇Navicat查詢結(jié)果不能修改的原因及解決方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2016-12-12
  • mysql解決時(shí)區(qū)相關(guān)問題

    mysql解決時(shí)區(qū)相關(guān)問題

    這篇文章主要介紹了mysql如何解決時(shí)區(qū)相關(guān)問題,本篇文章將從數(shù)據(jù)庫(kù)參數(shù)入手,逐步介紹時(shí)區(qū)相關(guān)內(nèi)容。感興趣的朋友可以了解下
    2020-08-08
  • 修改Innodb的數(shù)據(jù)頁(yè)大小以優(yōu)化MySQL的方法

    修改Innodb的數(shù)據(jù)頁(yè)大小以優(yōu)化MySQL的方法

    這篇文章主要介紹了修改Innodb的數(shù)據(jù)頁(yè)大小以優(yōu)化MySQL的方法,Innodb是MySQL下一個(gè)頗具人氣的數(shù)據(jù)引擎,需要的朋友可以參考下
    2015-05-05

最新評(píng)論

雷山县| 新乐市| 天等县| 工布江达县| 武定县| 安西县| 大田县| 丹江口市| 巴塘县| 弥勒县| 基隆市| 平凉市| 江阴市| 玉田县| 阿勒泰市| 中西区| 璧山县| 大宁县| 清苑县| 米泉市| 青铜峡市| 板桥市| 连州市| 藁城市| 肇庆市| 镇康县| 潜江市| 徐汇区| 恩施市| 昭通市| 依安县| 南丹县| 古交市| 体育| 常山县| 南乐县| 新乡县| 永泰县| 昭通市| 黔南| 饶阳县|