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

mysql利用覆蓋索引避免回表優(yōu)化查詢

 更新時(shí)間:2021年02月05日 11:42:22   作者:家有四只胖加菲  
這篇文章主要給大家介紹了關(guān)于mysql如何利用覆蓋索引避免回表優(yōu)化查詢的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

說(shuō)到覆蓋索引之前,先要了解它的數(shù)據(jù)結(jié)構(gòu):B+樹。

先建個(gè)表演示(為了簡(jiǎn)單,id按順序建):

id name
1 aa
3 kl
5 op
8  aa
10 kk
11 kl
14 jk
16 ml
17 mn
18 kl
19 kl
22 hj
24 io
25 vg
29 jk
31 jk
33 rt
34 ty
35 yu
37 rt
39 rt
41 ty
45 qt
47 ty
53 qi
57 gh
61 dh

 以主鍵以外的列值作為鍵值構(gòu)建的 B+ 樹索引,我們稱之為非聚集索引。

非聚集索引與聚集索引的區(qū)別在于非聚集索引的葉子節(jié)點(diǎn)不存儲(chǔ)表中的數(shù)據(jù),而是存儲(chǔ)該列對(duì)應(yīng)的主鍵,想要查找數(shù)據(jù)我們還需要根據(jù)主鍵再去聚集索引中進(jìn)行查找,這個(gè)再根據(jù)聚集索引查找數(shù)據(jù)的過(guò)程,我們稱為回表。

B+樹

B+樹和B樹是mysql索引的常用數(shù)據(jù)結(jié)構(gòu),B+樹是B樹的進(jìn)一步優(yōu)化,將上面的表轉(zhuǎn)成圖分析一下:

B+樹的特點(diǎn):

1.B+ 樹非葉子節(jié)點(diǎn)上是不存儲(chǔ)數(shù)據(jù)的,僅存儲(chǔ)鍵值

2.葉子節(jié)點(diǎn)的數(shù)據(jù)是按照順序排列的

3. B+ 樹中各個(gè)頁(yè)之間是通過(guò)雙向鏈表連接

聚簇索引和非聚簇索引

B+ 樹索引按照存儲(chǔ)方式的不同分為聚集索引和非聚集索引。

聚簇索引:

以 InnoDB 作為存儲(chǔ)引擎的表,表中的數(shù)據(jù)都會(huì)有一個(gè)主鍵,即使你不創(chuàng)建主鍵,系統(tǒng)也會(huì)幫你創(chuàng)建一個(gè)隱式的主鍵。

這是因?yàn)?InnoDB 是把數(shù)據(jù)存放在 B+ 樹中的,而 B+ 樹的鍵值就是主鍵,在 B+ 樹的葉子節(jié)點(diǎn)中,存儲(chǔ)了表中所有的數(shù)據(jù)。

這種以主鍵作為 B+ 樹索引的鍵值而構(gòu)建的 B+ 樹索引,我們稱之為聚集索引。

非聚簇索引:

以主鍵以外的列值作為鍵值構(gòu)建的 B+ 樹索引,我們稱之為非聚集索引。

非聚集索引與聚集索引的區(qū)別在于非聚集索引的葉子節(jié)點(diǎn)不存儲(chǔ)表中的數(shù)據(jù),而是存儲(chǔ)該列對(duì)應(yīng)的主鍵,想要查找數(shù)據(jù)我們還需要根據(jù)主鍵再去聚集索引中進(jìn)行查找,這個(gè)再根據(jù)聚集索引查找數(shù)據(jù)的過(guò)程,我們稱為回表。

如何用覆蓋索引避免回表

為什么明明用了非主鍵索引還會(huì)回表,簡(jiǎn)單說(shuō)就是非主鍵索引是非聚簇索引,在B+樹葉子節(jié)點(diǎn)中只保存主鍵和該非主鍵索引,一次查詢只能查到這兩個(gè)字段,如果想查三個(gè)字段,就必須再查一次聚簇索引,這就是回表。

舉個(gè)例子,表中新增一個(gè)字段age,我們用name建一個(gè)索引(非聚簇索引)

id name age
10  zs 23
7 ls 54
13 ww 12
5 zl 76
8 xw 23
12 xm 43
17 dy 21

select id,name from user where name = 'zs';

能夠命中name索引,索引葉子節(jié)點(diǎn)存儲(chǔ)了主鍵id,通過(guò)name的索引樹即可獲取id和name,無(wú)需回表,符合索引覆蓋,效率較高。

select id,name,age from user where name = 'zs';

能夠命中name索引,索引葉子節(jié)點(diǎn)存儲(chǔ)了主鍵id,但age字段必須回表查詢才能獲取到,不符合索引覆蓋,需要再次通過(guò)id值掃碼聚集索引獲取age字段,效率會(huì)降低?! ?/p>

結(jié)論:那怎么做才能避免回表呢?很簡(jiǎn)單,將單列索引(name)升級(jí)為聯(lián)合索引(name,age).

總結(jié)

到此這篇關(guān)于mysql利用覆蓋索引避免回表優(yōu)化查詢的文章就介紹到這了,更多相關(guān)mysql覆蓋索引避免回表優(yōu)化查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mac下mysql 5.7.17 安裝配置方法圖文教程

    Mac下mysql 5.7.17 安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.17 源碼編譯安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • mysql 8.0.17 winx64(附加navicat)手動(dòng)配置版安裝教程圖解

    mysql 8.0.17 winx64(附加navicat)手動(dòng)配置版安裝教程圖解

    這篇文章主要介紹了mysql 8.0.17 winx64(附加navicat)手動(dòng)配置版安裝教程圖解,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • MySQL三種安裝方法(yum安裝、編譯安裝、二進(jìn)制安裝)

    MySQL三種安裝方法(yum安裝、編譯安裝、二進(jìn)制安裝)

    本文主要介紹了MySQL三種安裝方法,包含yum安裝、編譯安裝、二進(jìn)制安裝這三種,文中通過(guò)示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • MySQL主從復(fù)制不一致的原因分析以及解決

    MySQL主從復(fù)制不一致的原因分析以及解決

    這篇文章主要介紹了MySQL主從復(fù)制不一致的原因分析以及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Centos6.4編譯安裝mysql 8.0.0 詳細(xì)教程

    Centos6.4編譯安裝mysql 8.0.0 詳細(xì)教程

    這篇文章主要為大家分享了Centos6.4編譯安裝mysql 8.0.0 詳細(xì)教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • MySQL中開啟和使用通用查詢?nèi)罩镜膶?shí)例教程

    MySQL中開啟和使用通用查詢?nèi)罩镜膶?shí)例教程

    這篇文章主要介紹了MySQL中開啟和使用通用查詢?nèi)罩镜膶?shí)例教程,包括其備份和關(guān)閉等基礎(chǔ)操作的例子講解,需要的朋友可以參考下
    2015-12-12
  • 一篇文章帶你了解MySQL數(shù)據(jù)庫(kù)約束

    一篇文章帶你了解MySQL數(shù)據(jù)庫(kù)約束

    數(shù)據(jù)庫(kù)中要管理很多數(shù)據(jù),但是這些數(shù)據(jù)是否正確、是否非法,光靠人力來(lái)檢驗(yàn)是遠(yuǎn)遠(yuǎn)不夠的,因此我們想讓數(shù)據(jù)庫(kù)擁有豐富的檢驗(yàn)和校驗(yàn)?zāi)芰?所以便引入了約束,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)約束的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • MySQL數(shù)據(jù)庫(kù)使用mysqldump導(dǎo)出數(shù)據(jù)詳解

    MySQL數(shù)據(jù)庫(kù)使用mysqldump導(dǎo)出數(shù)據(jù)詳解

    mysqldump是mysql用于轉(zhuǎn)存儲(chǔ)數(shù)據(jù)庫(kù)的實(shí)用程序。它主要產(chǎn)生一個(gè)SQL腳本,其中包含從頭重新創(chuàng)建數(shù)據(jù)庫(kù)所必需的命令CREATE TABLE INSERT等。接下來(lái)通過(guò)本文給大家介紹MySQL數(shù)據(jù)庫(kù)使用mysqldump導(dǎo)出數(shù)據(jù)詳解,需要的朋友一起學(xué)習(xí)吧
    2016-04-04
  • 本機(jī)連接虛擬機(jī)MYSQL的操作指南

    本機(jī)連接虛擬機(jī)MYSQL的操作指南

    要讓本機(jī)(主機(jī))連接到虛擬機(jī)上的 MySQL 數(shù)據(jù)庫(kù),你需要確保虛擬機(jī)和主機(jī)之間的網(wǎng)絡(luò)連接正常,并且 MySQL 配置允許外部連接,本文給大家介紹了本機(jī)連接虛擬機(jī)MYSQL的操作指南,需要的朋友可以參考下
    2024-12-12
  • Mysql使用簡(jiǎn)單教程(二)

    Mysql使用簡(jiǎn)單教程(二)

    這篇文章主要介紹了Mysql使用簡(jiǎn)單教程(二)的相關(guān)資料,需要的朋友可以參考下
    2016-05-05

最新評(píng)論

桃江县| 仙桃市| 柘城县| 贵溪市| 高雄县| 苗栗市| 怀安县| 玉门市| 左云县| 陆川县| 鞍山市| 宁乡县| 监利县| 宁河县| 迭部县| 建平县| 深水埗区| 黄骅市| 海城市| 惠水县| 和龙市| 浙江省| 久治县| 清河县| 凤山市| 老河口市| 福贡县| 洮南市| 桐柏县| 敖汉旗| 贵南县| 五家渠市| 罗山县| 清原| 尉氏县| 微博| 钦州市| 思茅市| 博客| 外汇| 通州区|