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

Mysql?InnoDB聚簇索引二級索引聯合索引特點

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

接上一篇內容:http://www.fzitv.net/article/249934.htm

一、聚簇索引

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

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

它有 2 個特點:

特點 1

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

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

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

特點 2

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

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

二、二級索引

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

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

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

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

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

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

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

現在根據條件 c2 = 4 來查找數據記錄,過程如下:

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

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

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

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

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

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

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

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

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

三、聯合索引

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

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

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

現在,給c2 和 c3 建立聯合索引,如圖所示:

需要注意的是:

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

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

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

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

相關文章

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

    mysql like查詢字符串示例語句

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

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

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

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

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

    Mysql外鍵設置中的CASCADE、NO ACTION、RESTRICT、SET NULL

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

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

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

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

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

    MySQL數據庫表內容的增刪查改操作實例詳解

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

    CentOS7下二進制安裝mysql 5.7.23

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

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

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

    MYSQL半同步配置思路

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

最新評論

高清| 普洱| 湖南省| 武强县| 类乌齐县| 梁河县| 鹤壁市| 侯马市| 通州区| 宣汉县| 常宁市| 泉州市| 健康| 武义县| 大悟县| 九龙城区| 黑河市| 禄劝| 花莲县| 广宗县| 军事| 社会| 临朐县| 云浮市| 南召县| 元谋县| 崇仁县| 沐川县| 晋州市| 辰溪县| 丰城市| 云龙县| 繁峙县| 安乡县| 海门市| 平乐县| 平山县| 宁海县| 轮台县| 远安县| 本溪市|