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

MySQL索引的各種類型

 更新時(shí)間:2020年09月07日 11:51:28   作者:萬(wàn)貓學(xué)社  
這篇文章主要介紹了MySQL索引的各種類型,幫助大家更好的理解和學(xué)習(xí)MySQL索引,感興趣的朋友可以了解下

什么是索引?

索引是數(shù)據(jù)庫(kù)存儲(chǔ)引擎用于快速查找到指定數(shù)據(jù)的一種數(shù)據(jù)結(jié)構(gòu)。

可以用新華字典做類比:如果新華字典中對(duì)每個(gè)字的詳細(xì)解釋是數(shù)據(jù)庫(kù)中表的記錄,那么按部首或拼音等排序的目錄就是索引,使用它可以讓我們快速查找的某一個(gè)字詳細(xì)解釋的位置。

在MySQL中,存儲(chǔ)引擎也是用了類似的方法,先在索引中找到對(duì)應(yīng)的值,然后再根據(jù)匹配的索引值找到對(duì)應(yīng)表中記錄的位置。

面試中為什么問(wèn)索引?

之所以在索引在面試中經(jīng)常被問(wèn)到,就是因?yàn)椋核饕菙?shù)據(jù)庫(kù)的良好性能表現(xiàn)的關(guān)鍵,也是對(duì)查詢能優(yōu)化最有效的手段。索引能夠輕易地把查詢性能提高幾個(gè)數(shù)量級(jí)。

然而,糟糕的索引也同樣會(huì)影響查詢性能,當(dāng)表中的數(shù)據(jù)量越來(lái)越多的時(shí)候,索引對(duì)性能的影響就越大。在數(shù)據(jù)量比較少并且負(fù)責(zé)比較低的時(shí)候,糟糕的索引對(duì)性能的影響可能不明顯,但是當(dāng)數(shù)據(jù)量逐漸增多的時(shí)候,性能會(huì)急劇下降。

索引的類型

經(jīng)過(guò)前面的介紹,我們就進(jìn)入正題,了解一下MySQL支持的索引類型,以及它們的原理和用法。

不同類型的索引,可以為不同場(chǎng)景提供更好的性能。在MySQL中,索引是在存儲(chǔ)引擎層面實(shí)現(xiàn)的,而不是在服務(wù)器層面實(shí)現(xiàn)的。正如大家所知道,MySQL支持多種類型的存儲(chǔ)引擎。所以,在不同存儲(chǔ)引擎中索引的實(shí)現(xiàn)方式并不是一樣的,也不是所有類型的索引都被所有存儲(chǔ)引擎支持的,即使多個(gè)存儲(chǔ)引擎支持同一種類型的索引,它底層的實(shí)現(xiàn)也有可能是不相同的。

B-Tree索引

B-Tree索引是被大多數(shù)MySQL存儲(chǔ)引擎支持的,在我們討論索引時(shí),假如沒(méi)有特別地說(shuō)明類型,那么大概率說(shuō)的就是B-Tree索引了。我們使用B-Tree這個(gè)詞,是因?yàn)镸ySQL在創(chuàng)建表和其他語(yǔ)句中就使用這個(gè)關(guān)鍵字。

然而,在不同存儲(chǔ)引擎的底層可能使用不同的數(shù)據(jù)結(jié)構(gòu)和算法,比如:InnoDB存儲(chǔ)引擎內(nèi)部使用的是B+Tree結(jié)構(gòu),NDB集群存儲(chǔ)引擎內(nèi)部使用的是T-Tree結(jié)構(gòu)。不同存儲(chǔ)引擎用以不同的方式使用B-Tree索引,性能也可能不同,比如:InnoDB的索引上存儲(chǔ)的是原數(shù)據(jù)格式,而MyISAM存儲(chǔ)引擎使用前綴壓縮技術(shù)使索引更小,InnoDB索引的行存儲(chǔ)的數(shù)據(jù)行的主鍵引用,而MyISAM存儲(chǔ)引擎的索引的行存儲(chǔ)的是數(shù)據(jù)行的物理位置。

B-Tree索引的原理

B-Tree索引能夠加快訪問(wèn)數(shù)據(jù)的速度,因?yàn)椴恍枰頀呙杈涂梢钥焖贆z索的需要的數(shù)據(jù)。那么B-Tree索引是怎么做到的呢?我們通過(guò)一個(gè)簡(jiǎn)單的例子了解一下InnoDB的B-Tree索引是怎么工作的:

CREATE TABLE `om_address` (
 `province_name` varchar(255) NOT NULL COMMENT '省',
 `city_name` varchar(255) NOT NULL COMMENT '市',
 `district_name` varchar(255) NOT NULL COMMENT '區(qū)',
 `detailed_address` varchar(255) NULL DEFAULT NULL COMMENT '詳細(xì)地址',
 INDEX `index_province_city_district`(`province_name`, `city_name`, `district_name`) USING BTREE
) ENGINE = InnoDB;

這個(gè)表中共有4個(gè)字段,分別表示省、市、區(qū)和詳細(xì)地址,還有一個(gè)B-Tree索引,其中包含了省、市、區(qū)三個(gè)字段。因?yàn)樗饕乃兄刀际前凑枕樞虼鎯?chǔ)的,即:節(jié)點(diǎn)的左子樹(shù)比當(dāng)前節(jié)點(diǎn)小,節(jié)點(diǎn)的右子樹(shù)比當(dāng)前節(jié)點(diǎn)大。那么當(dāng)查詢數(shù)據(jù)時(shí),從索引的根節(jié)點(diǎn)開(kāi)始搜索,根據(jù)比較當(dāng)前節(jié)點(diǎn)的索引值向子樹(shù)進(jìn)行查找,直到找到對(duì)應(yīng)的索引值,或者根本沒(méi)有找到。

B-Tree索引的用法

根據(jù)B-Tree索引的特點(diǎn),它可以用于全值匹配、值范圍匹配和最左前綴匹配。

  • 全值匹配是指和索引中所有的字段進(jìn)行匹配,比如:查詢黑龍江省哈爾濱市南崗區(qū)的數(shù)據(jù)。
  • 值范圍匹配是指索引中字段的某一范圍進(jìn)行匹配,但是必須滿足前面字段的全匹配,比如:第一個(gè)字段province_name省名稱的全匹配,第二個(gè)字段city_name城市名稱的范圍匹配。
  • 最左前綴匹配是指索引中字段的某一開(kāi)頭部分進(jìn)行匹配,但是必須滿足前面字段的全匹配,比如:第一個(gè)字段province_name省名稱為內(nèi)蒙古,第二個(gè)字段city_name城市名稱以“呼”開(kāi)頭。

哈希索引

哈希索引是基于哈希表實(shí)現(xiàn)的,用于精確匹配索引所指向的數(shù)據(jù)。存儲(chǔ)引擎對(duì)每一行數(shù)據(jù)的所有索引字段計(jì)算出一個(gè)哈希碼,哈希碼是一個(gè)比較小的值,并且不同的數(shù)據(jù)計(jì)算出來(lái)的哈希碼一般情況下也不一樣。哈希索引中存放了這個(gè)哈希碼和指向這個(gè)數(shù)據(jù)行的指針。

在MySQL中,只有Memory存儲(chǔ)引擎支持哈希索引,也是Memory存儲(chǔ)引擎的默認(rèn)索引類型。另外,在InnoDB存儲(chǔ)引擎中也運(yùn)用了哈希索引,叫做自適應(yīng)哈希索引。當(dāng)某些索引中被非常頻繁的使用時(shí),InnoDB存儲(chǔ)引擎會(huì)在內(nèi)存中基于B-Tree索引之上再創(chuàng)建一個(gè)哈希索引,這樣一來(lái)使得B-Tree索引也具有的快速哈希查找的優(yōu)點(diǎn)。

哈希索引因?yàn)橹恍璐娣艑?duì)應(yīng)數(shù)據(jù)的哈希值,所以索引的結(jié)構(gòu)非常緊湊,占用空間小,同時(shí)查詢速度也非???。不過(guò),哈希索引只支持全值等值查詢,不能索引字段范圍匹配和部分索引字段匹配。

空間數(shù)據(jù)索引

空間數(shù)據(jù)索引(R-Tree)主要用于地理數(shù)據(jù)的存儲(chǔ),會(huì)從所有維度來(lái)索引數(shù)據(jù),查詢時(shí)可以有效的使用任意維度進(jìn)行組合查詢。 目前,MyISAM存儲(chǔ)引擎支持空間數(shù)據(jù)索引,不過(guò)必須使用MySQL的GIS相關(guān)的函數(shù)來(lái)維護(hù)數(shù)據(jù)。

在MySQL中,空間索引只能建立在空間數(shù)據(jù)類型上,如:GEOMETRY、POINT、LINESTRING等。

全文索引

全文索引不像之前介紹的索引那樣直接比較索引中的值,而是直接比較查找的文本中的關(guān)鍵詞,它類似于搜索引擎做的事情,不是簡(jiǎn)單的where條件匹配。

在相同的字段上,可以同時(shí)創(chuàng)建全文索引和B-Tree索引,不會(huì)有沖突。全文索引適用于match和against操作,不是普通的where條件操作。在MySQL中,只能在類型為CHAR、VARCHAR、TEXT的字段上創(chuàng)建全文索引。

總結(jié)

索引是數(shù)據(jù)庫(kù)存儲(chǔ)引擎用于快速查找到指定數(shù)據(jù)的一種數(shù)據(jù)結(jié)構(gòu),它包括B-Tree索引、哈希索引、空間數(shù)據(jù)索引、全文索引,其中B-Tree索引是我們最常用到的,InnoDB存儲(chǔ)引擎內(nèi)部使用的是B+Tree結(jié)構(gòu);哈希索引是基于哈希表實(shí)現(xiàn)的,用于精確匹配索引所指向的數(shù)據(jù);空間數(shù)據(jù)索引從所有維度來(lái)索引數(shù)據(jù),查詢時(shí)可以有效的使用任意維度進(jìn)行組合查詢;全文索引是直接比較查找的文本中的關(guān)鍵詞,類似于搜索引擎。

以上就是MySQL索引的各種類型簡(jiǎn)介的詳細(xì)內(nèi)容,更多關(guān)于MySQL 索引類型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL之xtrabackup備份恢復(fù)的實(shí)現(xiàn)

    MySQL之xtrabackup備份恢復(fù)的實(shí)現(xiàn)

    本文主要介紹了MySQL之xtrabackup備份恢復(fù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • MySQL Where 條件語(yǔ)句介紹和運(yùn)算符小結(jié)

    MySQL Where 條件語(yǔ)句介紹和運(yùn)算符小結(jié)

    這篇文章主要介紹了MySQL Where 條件語(yǔ)句介紹和運(yùn)算符小結(jié),本文同時(shí)還給出了一些用法示例,需要的朋友可以參考下
    2014-11-11
  • mysql下float類型使用一些誤差詳解

    mysql下float類型使用一些誤差詳解

    我想很多朋友都不怎么會(huì)在mysql中使用float類型,特別是用到金錢時(shí)我們可能會(huì)用雙精度來(lái)做,我們知道m(xù)ysql的float類型是單精度浮點(diǎn)類型不小心就會(huì)導(dǎo)致數(shù)據(jù)誤差
    2012-11-11
  • Mysql兩種情況下更新字段中部分?jǐn)?shù)據(jù)的方法

    Mysql兩種情況下更新字段中部分?jǐn)?shù)據(jù)的方法

    Mysql更新字段中部分?jǐn)?shù)據(jù)的兩種情況在下文給予詳細(xì)的解決方法,感興趣的朋友可以參考下哈
    2013-05-05
  • MySQL字符集和排序規(guī)則詳解(推薦)

    MySQL字符集和排序規(guī)則詳解(推薦)

    MySQL中,字符集和排序規(guī)則在處理文本數(shù)據(jù)時(shí)起著至關(guān)重要的作用,本文將詳細(xì)介紹 MySQL中的字符集和排序規(guī)則,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • 一文帶你將csv文件導(dǎo)入到mysql數(shù)據(jù)庫(kù)(親測(cè)有效)

    一文帶你將csv文件導(dǎo)入到mysql數(shù)據(jù)庫(kù)(親測(cè)有效)

    一直不大懂csv怎么通過(guò)mysql圖形化的界面直接導(dǎo)入,看了很多帖,才覺(jué)得自己會(huì)了,下面這篇文章主要給大家介紹了關(guān)于將csv文件導(dǎo)入到mysql數(shù)據(jù)庫(kù)的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • MySQL基礎(chǔ)教程之IN的用法詳解

    MySQL基礎(chǔ)教程之IN的用法詳解

    這篇文章主要介紹了MySQL基礎(chǔ)教程之IN的用法詳解的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • MySQL不使用子查詢的原因及優(yōu)化案例

    MySQL不使用子查詢的原因及優(yōu)化案例

    對(duì)于mysql,不推薦使用子查詢,效率太差,執(zhí)行子查詢時(shí),MYSQL需要?jiǎng)?chuàng)建臨時(shí)表,查詢完畢后再刪除這些臨時(shí)表,所以,子查詢的速度會(huì)受到一定的影響,本文給大家詳細(xì)介紹了MySQL不使用子查詢的原因及優(yōu)化案例,需要的朋友可以參考下
    2025-01-01
  • MySQL 5.7 zip版本(zip版)安裝配置步驟詳解

    MySQL 5.7 zip版本(zip版)安裝配置步驟詳解

    這篇文章主要介紹了MySQL 5.7 zip版本(zip版)安裝配置步驟詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-02-02
  • mysql字符切割的四種方式匯總

    mysql字符切割的四種方式匯總

    這篇文章主要介紹了mysql字符切割的四種方式匯總,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評(píng)論

惠东县| 宣城市| 密山市| 眉山市| 聂拉木县| 柳林县| 永吉县| 文水县| 彰武县| 通州市| 滨海县| 上虞市| 万荣县| 芒康县| 天全县| 进贤县| 卢龙县| 剑河县| 江西省| 裕民县| 得荣县| 滁州市| 马边| 拉萨市| 新建县| 永宁县| 巴南区| 沁水县| 汉中市| 凌源市| 湘阴县| 泽普县| 临沭县| 和硕县| 德兴市| 白沙| 东阳市| 鹤壁市| 抚顺市| 柳州市| 阿瓦提县|