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

Mysql?InnoDB聚簇索引二級索引聯(lián)合索引特點

 更新時間:2022年05月31日 09:46:21   作者:把蘋果咬哭的測試筆記  
這篇文章主要為大家介紹了Mysql?InnoDB聚簇索引二級索引聯(lián)合索引特點詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

接上一篇內(nèi)容:http://m.fzitv.net/article/249934.htm

一、聚簇索引

其實之前內(nèi)容中介紹的 B+ 樹就是聚簇索引。

這種索引不需要我們顯示地使用 INDEX 語句去創(chuàng)建,InnoDB 引擎會自動創(chuàng)建。另外,在 InnoDB 引擎中,聚簇索引就是數(shù)據(jù)的存儲方式。

它有 2 個特點:

特點 1

使用記錄主鍵值的大小進行記錄和頁的排序。

其中又包含了下面 3 個點:

  • 頁(包括葉節(jié)點和內(nèi)節(jié)點)內(nèi)的記錄按照主鍵的大小順序排成一個單向鏈表。頁內(nèi)記錄劃分為若干組,每個組中主鍵值最大的記錄在頁內(nèi)的偏移量被當(dāng)做槽依次存放在頁目錄中。我們可以通過二分法快速定位主鍵值等于某個值的記錄。
  • 各存放用戶記錄的頁也是根據(jù)頁中用戶記錄的主鍵大小順序排成一個雙向鏈表。
  • 各存放目錄項記錄的頁分為不同層級。在同一層級中的頁,也是根據(jù)頁中目錄項記錄的主鍵大小順序排成一個雙向鏈表。

特點 2

B+樹的葉子節(jié)點存儲的是完整的用戶記錄。

這里完整的用戶記錄就是指,這個記錄中存儲了所有的列的值(包括隱藏列)。

二、二級索引

聚簇索引只能在我們搜索主鍵值時才能發(fā)揮作用,因為 B+ 樹中的數(shù)據(jù)都是按照主鍵進行排序。

如果現(xiàn)在我用“別的列”作為搜索條件,怎么辦?

答案:再建一個 B+ 樹,用這個“別的列”(非主鍵列)的值大小作為排序規(guī)則。

比如之前的內(nèi)容都是以 c1 列為主鍵,現(xiàn)在用 c2 列再來創(chuàng)建一個 B+ 樹:

看起來跟之前的聚簇索引沒啥區(qū)別啊?實際上還是存在不同的:

  • 使用記錄 c2 列的大小進行記錄和頁的排序。細分的 3 點與上面聚簇索引介紹的一樣,只不過上面是主鍵,這里是用的 c2 列(非主鍵)。
  • B+ 樹的葉子節(jié)點存儲的不是完整的用戶記錄,只有c2 列 + 主鍵這2個列的值。
  • 目錄項記錄中不再是主鍵 + 頁號,變成了c2 列 + 頁號。

另外需要注意的是,因為 c2 列不是主鍵,所以沒有唯一性約束,可能存在多條滿足搜索條件的數(shù)據(jù)。

現(xiàn)在根據(jù)條件 c2 = 4 來查找數(shù)據(jù)記錄,過程如下:

確定第一條符合 c2 = 4 的目錄項所在頁,也就是頁 42。

到頁 42 中,進一步確定第一條符合條件的記錄所在的用戶記錄頁。因為 2 < 4 <= 4,所以可能存在 頁 34 或 35 中。

先到頁 34 中定位第一條滿足 c2 = 4 的用戶記錄,如果有就不需要再到頁 35 中繼續(xù)定位了。

在頁 34 中定位到第一條記錄。因為這條用戶記錄不完整,所以拿到這條記錄的主鍵,再到聚簇索引中找到完整的用戶記錄。

上面最后一步,通過攜帶主鍵信息到聚簇索引中重新定位完整的用戶記錄的過程也叫回表。

回表后,再回到這顆新的 B+ 樹,找到剛才那個第一個符合條件的記錄,并沿著記錄的單向鏈表向后繼續(xù)搜索其他也滿足 c2 = 4 的記錄,每找到一條就繼續(xù)回表操作,重復(fù)這個過程。

這種以非主鍵列的大小為排序規(guī)則而建立 B+ 樹需要執(zhí)行回表操作才可以定位到完整的用戶記錄,這種 B+樹就稱為二級索引或者輔助索引。

為什么要回表?直接把完整用戶記錄都放葉子節(jié)點不就可以了?

沒錯,思路沒問題。但是這樣操作就相當(dāng)于每建立一顆 B+ 樹都把所有的用戶記錄復(fù)制一遍,太浪費存儲空間。

三、聯(lián)合索引

我們可以同時為多個列建立索引,比如 c2 列和 c3 列,以這 2 個列的大小為排序規(guī)則建立的 B+ 樹索引就稱為聯(lián)合索引,也稱為符合索引或多列索引。

這里的按照 c2 和 c3 列大小進行排序,需要注意兩點:

  • 先把各個記錄和頁按照 c2 列進行排序。
  • 在記錄的 c2 列都相同的情況下,再采用 c3 列進行排序。

現(xiàn)在,給c2 和 c3 建立聯(lián)合索引,如圖所示:

需要注意的是:

  • 每條目錄項記錄都是由 c2、c3、頁號這 3 部分組成。各記錄先按照 c2 列的值進行排序,如果記錄的 c2 列相同,則按照 c3 列進行排序。
  • B+ 樹葉子節(jié)點的用戶記錄由 c2、c3、和 主鍵c1 列組成。

本質(zhì)上,聯(lián)合索引也是一個二級索引,只不過它的索引列包括 c2、c3 這2個列。

本文參考書籍:《mysql是怎樣運行的》

以上就是Mysql InnoDB聚簇索引二級索引聯(lián)合索引特點詳解的詳細內(nèi)容,更多關(guān)于Mysql InnoDB聚簇二級聯(lián)合索引的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • mysql like查詢字符串示例語句

    mysql like查詢字符串示例語句

    在mysql中如果我們要模糊查詢數(shù)據(jù)我們可以使用like帶%%號來實現(xiàn)查詢,下面我來簡單的介紹一下關(guān)于mysql like使用方法
    2013-10-10
  • SQL中where語句的用法及實例代碼(條件查詢)

    SQL中where語句的用法及實例代碼(條件查詢)

    WHERE如需有條件地從表中選取數(shù)據(jù),可將WHERE 子句添加到SELECT語句,下面這篇文章主要給大家介紹了關(guān)于SQL中where語句的用法及實例(條件查詢)的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • 與MSSQL對比學(xué)習(xí)MYSQL的心得(七)--查詢

    與MSSQL對比學(xué)習(xí)MYSQL的心得(七)--查詢

    在這個《與MSSQL對比學(xué)習(xí)MYSQL的心得》系列里面,我一直都把MYSQL跟SQLSERVER進行比較,相互進行比較是學(xué)習(xí)一樣?xùn)|西比較好的方法
    2014-08-08
  • Mysql外鍵設(shè)置中的CASCADE、NO ACTION、RESTRICT、SET NULL

    Mysql外鍵設(shè)置中的CASCADE、NO ACTION、RESTRICT、SET NULL

    本文主要介紹了Mysql外鍵設(shè)置中的CASCADE、NO ACTION、RESTRICT、SET NULL,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • MySQL數(shù)據(jù)庫查詢性能優(yōu)化的4個技巧干貨

    MySQL數(shù)據(jù)庫查詢性能優(yōu)化的4個技巧干貨

    這篇文章主要為大家介紹了MySQL數(shù)據(jù)庫查詢性能優(yōu)化的4個技巧干貨詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 解決MySQL?Varchar?類型尾部空格的問題

    解決MySQL?Varchar?類型尾部空格的問題

    這篇文章主要介紹了MySQL?Varchar?類型尾部空格,在這里需要注意的是?binary?排序規(guī)則的?pad?屬性為?NO?PAD,這里其實不是個例外,因為?char、varchar?和?text?類型都歸類為?nonbinary,感興趣的朋友跟隨小編一起學(xué)習(xí)下吧
    2022-04-04
  • MySQL數(shù)據(jù)庫表內(nèi)容的增刪查改操作實例詳解

    MySQL數(shù)據(jù)庫表內(nèi)容的增刪查改操作實例詳解

    對于刪除操作來說,是將表單個或者多個數(shù)據(jù)進行刪除,而截斷則是對整個表進行操作,會將整個表數(shù)據(jù)都清除,本文給大家介紹MySQL數(shù)據(jù)庫表內(nèi)容的增刪查改操作大全,感興趣的朋友一起看看吧
    2025-04-04
  • CentOS7下二進制安裝mysql 5.7.23

    CentOS7下二進制安裝mysql 5.7.23

    這篇文章主要為大家詳細介紹了CentOS7下二進制安裝mysql 5.7.23,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • MySQL判斷查詢條件是否包含某字符串的7種方式總結(jié)

    MySQL判斷查詢條件是否包含某字符串的7種方式總結(jié)

    SQLServer數(shù)據(jù)庫死鎖是指在多個事務(wù)同時訪問數(shù)據(jù)庫資源時,發(fā)生了互相等待對方所持有資源的情況,導(dǎo)致所有事務(wù)無法繼續(xù)執(zhí)行的現(xiàn)象,這篇文章主要給大家介紹了關(guān)于MySQL判斷查詢條件是否包含某字符串的7種方式,需要的朋友可以參考下
    2024-07-07
  • MYSQL半同步配置思路

    MYSQL半同步配置思路

    在默認設(shè)置下,MySQL使用異步復(fù)制,主庫發(fā)送binlog后不等待從庫確認,可能導(dǎo)致數(shù)據(jù)不一致或丟失,半同步復(fù)制則在主庫更新數(shù)據(jù)后先等待從庫確認同步完成,本文給大家介紹MYSQL半同步配置,感興趣的朋友一起看看吧
    2023-09-09

最新評論

广昌县| 福安市| 连城县| 赣榆县| 柯坪县| 滨州市| 娄烦县| 通化市| 龙井市| 克拉玛依市| 台东县| 祁阳县| 黔西| 商河县| 城市| 含山县| 黄陵县| 柳林县| 繁峙县| 和平区| 濉溪县| 柳江县| 平安县| 德钦县| 陆河县| 六盘水市| 文水县| 永清县| 西乡县| 济南市| 北宁市| 类乌齐县| 海丰县| 乐平市| 万全县| 舒兰市| 营口市| 舞阳县| 镇平县| 历史| 桂阳县|