MySQL索引底層原理

2021-10-23 06:45:44 字數 731 閱讀 1586

通過hash演算法,能快速檢索資料

資料碰撞問題用鏈位址法

無法進行範圍搜尋

解決雜湊索引無法範圍搜尋的問題

極端情況下會退化成線性鍊錶,自增主鍵必然會導致極端情況

會自動調整樹形態,使其保持平衡,調整會消耗效能

無法完全解決二叉查詢樹的問題

絕對平衡的二叉樹,更耗效能

根本解決了紅黑數的問題

由於乙個節點只儲存乙個資料,在磁碟io上消耗過多時間

由於從磁碟讀取1b資料和1kb資料的時間基本一致

因此可以在乙個節點上儲存多個資料,這就是b樹

即便如何,每個節點上儲存的資料還是有限的

b樹節點上儲存的是資料,每個節點存不了很多資料

而b+樹節點上儲存的是索引,葉子節點上存所有的資料

相對b樹,b+樹的高度降低了,減少了磁碟io

mysql的索引用的就是b+樹

myisam

innodb

不支援事務

支援事務

表鎖行級鎖

資料和索引分開

(非聚集索引)

資料和索引放一起

(聚集索引)

索引樹的葉子節點儲存資料的實體地址

只在主鍵索引樹的葉子節點儲存具體資料,其他索引樹的葉子節點儲存主鍵。

當使用其他索引時,先在其他索引樹中找到主鍵,再去主鍵索引樹中找到具體資料。這樣做是為了節省空間,避免每個索引樹都儲存資料(聚集索引),所以效能比myisam差點

MySQL索引底層(二) 索引底層原理

聚集索引 上次我們講到了主鍵的索引,我們可以執行一下sql語句 explain select from t user where a 1 我們可以看到這條sql走的是主鍵的索引,而在mysql的innodb中,主鍵索引則是聚集索引,資料的物理順序與鍵值的邏輯 索引 順序相同,其實就是說主鍵索引跟其他...

mysql索引底層原理

索引的本質 資料結構 組織資料的方式 innodb沒有主鍵索引時,判斷是否含有唯一索引,沒有唯一就生成乙個隱藏的row id作為主鍵 在資料較少時是以鍊錶的形式儲存資料的,當資料過多,長鍊表會影響資料的查詢,此時會將資料通過頁的形式進行儲存,預設一頁儲存16kb資料,每頁會與每頁之間通過指標進行連線...

mysql底層 MySQL索引底層實現原理

索引的本質 mysql官方對索引的定義為 索引 index 是幫助mysql高效獲取資料的資料結構。提取句子主幹,就可以得到索引的本質 索引是資料結構。我們知道,資料庫查詢是資料庫的最主要功能之一。我們都希望查詢資料的速度能盡可能的快,因此資料庫系統的設計者會從查詢演算法的角度進行優化。最基本的查詢...