【Mysql】索引底層資料結構
What's the index?
- 索引是幫助MySql高效獲取資料的排好序的資料結構
- 索引儲存在檔案裡
- 索引有很多不同的結構(BineryTree/Hash/BTree)
Why B+Tree is been used until now?
*BineryTree:沒有自動調整功能,如果一直分別加入排序的資料(1-2-3-4-5-6-...),會演變成連結串列,就失去了索引的意義了。
*HASH:查詢一行可以使用,但是對於範圍查詢無力。
*RedBlackTree:資料多的時候高度會過高,導致時間複雜度過高。
*B-Tree:讓紅黑樹從縱向發展轉變成橫向發展,一個結點儲存多個資料。但是上層結點儲存了完整資料記錄,導致度數低。
CPU一般一次I/O將整個結點放入記憶體進行查詢索引的位置,所以在結點中查詢的時間幾乎可以忽略不計,所以結點數中的資料個數應該越多越好,所以data中應該不存完整的資料記錄
*B+Tree:
Something about MyISAM and InnoDB..
對於MyISAM,其索引檔案和資料檔案不是同一個檔案,所以data中存放的是資料地址
*非主鍵索引和主鍵索引一樣,data存放的都是資料地址,每一個非主鍵索引都有單獨的B+Tree
InnoDB:資料和索引存放在同一檔案-->data中存放的是完整的資料記錄--->將所有資料聚集在一起(聚簇索引)
--->查詢速度更快--->相對MyISAM減少了一次查詢(地址-資料)
*非主鍵索引data儲存的是主鍵,不是完整的資料記錄
InnoDB索引實現(聚集索引)
- 資料檔案本身就是索引檔案
- 表資料檔案本身就是B+Tree組織的一個索引結構檔案
- 聚集索引的葉子節點包含了完整的資料記錄
- 為什麼InnoDB表必須有主鍵,並且推薦使用整形的自增主鍵
*自增:這樣可以讓新增的資料插入到最後,防止資料插入在中間導致分頁增加時間
*整形:節省比較時間(可比較與uuid)
- 為什麼非主鍵索引結構葉子結點儲存的是主鍵值
*一致性:如果一個存的不是主鍵(資料記錄),更改一個資料,就要把所有索引都更改一遍
*節省儲存空間:只存一個主鍵肯定節省儲存空間啦~
相關文章
- 深入理解MySQL索引底層資料結構MySql索引資料結構
- MySQL索引及優化(1)儲存引擎和底層資料結構MySql索引優化儲存引擎資料結構
- Redis - 底層資料結構Redis資料結構
- 你真的理解索引嗎?從資料結構層面解析mysql索引原理索引資料結構MySql
- mysql索引底層實現MySql索引
- Redis 概念以及底層資料結構Redis資料結構
- MySQL索引底層實現原理MySql索引
- Redis基本資料型別底層資料結構Redis資料型別資料結構
- Java 的 ArrayList 的底層資料結構Java資料結構
- 深入瞭解Redis底層資料結構Redis資料結構
- Redis(二)--- Redis的底層資料結構Redis資料結構
- HashMap底層資料結構原始碼解析HashMap資料結構原始碼
- Redis底層資料結構——壓縮列表Redis資料結構
- 乾貨:mysql索引的資料結構MySql索引資料結構
- MySQL-06.索引的資料結構MySql索引資料結構
- 關於Mysql索引的資料結構MySql索引資料結構
- 63_索引管理_核心級知識點:深入探秘type底層資料結構索引資料結構
- mysql儲存引擎InnoDB詳解,從底層看清InnoDB資料結構MySql儲存引擎資料結構
- 深入理解 MySQL 索引底層原理MySql索引
- MySQL底層概述—6.索引原理MySql索引
- Redis - 資料型別對映底層結構Redis資料型別
- Redis資料結構SortedSet底層原理詳解Redis資料結構
- 【redis】-- 資料結構及底層編碼篇Redis資料結構
- 前大眾點評資深研發專家對Mysql索引的解析與底層資料結構的解刨MySql索引資料結構
- Redis原始碼分析-底層資料結構盤點Redis原始碼資料結構
- Redis List 底層三種資料結構原理剖析Redis資料結構
- MySQL 索引結構MySql索引
- Redis學習筆記(二)redis 底層資料結構Redis筆記資料結構
- 效能調優-Mysql索引資料結構詳解與索引優化MySql索引資料結構優化
- MySQL底層概述—1.InnoDB記憶體結構MySql記憶體
- MySQL索引的結構MySql索引
- Redis的ZSet底層資料結構,ZSet型別全面解析Redis資料結構型別
- Redis(一):基本資料型別與底層儲存結構Redis資料型別
- 面試必備之MYSQL索引底層原理分析面試MySql索引
- golang map的底層結構Golang
- Mysql索引資料結構為什麼是B+樹?MySql索引資料結構
- Redis系列(一)底層資料結構之簡單動態字串Redis資料結構字串
- InnoDB索引與底層原理索引