mysql 索引底層原理分析

2021-10-04 01:50:24 字數 1299 閱讀 2016

一、區分幾個概念

1、頁

1、頁號:記錄當前是第幾頁。

2、頁目錄:記錄行資料,標記行開始的最小主鍵索引資料。

3、行資料:標識每一行的資料。1_111a 標識第一行資料,1_表示主鍵索引。

行與行資料使用鍊錶有序相連。

2、b+樹

多個頁相互連線在一起,為了方便查詢會再向上生成乙個新的類似頁的東西,記錄頁碼和每頁最小的主鍵索引,按照這個思路就會生成一顆樹,這就是乙個b+樹。

3、回表,如果是乙個聚集索引(abc),在最下面的葉子節點儲存的不會是真實資料,而是對應的主鍵索引,所以如果查詢的時候查的資料並非abcd這四個字段,比如查詢的是abcde,就需要回表根據主鍵id繼續查詢。

select a,b,c,d,e from x where a=1 and b=2 and c=3 and d=e; 是不能利用索引的。

select a,b,c from x where a>1; 是不能利用索引的,因為回表的話會全表掃瞄。

查詢過程會先查詢a=1,找到資料後查詢後續所有資料。

select a,b,c from x where a>7; 可能會利用索引,因為mysql優化器認為即使回表返回的資料不會很多,效率比全表掃瞄高一些。

4、如何建立索引

① 索引選擇:選擇性 = 不重複的記錄數 / 總記錄數

選擇性的取值範圍為(0, 1],選擇性越高的索引價值越大。如果選擇性等於1,就代表這個列的不重複值和表記錄 數是一樣的,那麼對這個列建立索引是非常合適的,如果選擇性非常小,那麼就代表這個列的重複值是很多的, 不適合建立索引。

② 最左字首原則

③ 1>索引列的型別盡量小

2>利用索引字串值的字首

3>主鍵自增

4>定位並刪除表中的重複和冗餘索引

5>盡量使用覆蓋索引進行查詢,避免回表帶來的效能損耗。

Mysql索引底層原理分析

mysql索引底層原理分析,mysql索引的本質 mysql索引的底層原理 mysql索引的實戰經驗 面試問 資料庫中最常見的慢查詢優化方式是什麼?同學a 加索引。問 為什麼加索引能優化慢查詢?同學a 不知道同學b 因為索引其實就是一種優化查詢的資料結構,比如mysql中的索引是用b 樹實現的,而b...

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

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

MySQL索引底層原理

通過hash演算法,能快速檢索資料 資料碰撞問題用鏈位址法 無法進行範圍搜尋 解決雜湊索引無法範圍搜尋的問題 極端情況下會退化成線性鍊錶,自增主鍵必然會導致極端情況 會自動調整樹形態,使其保持平衡,調整會消耗效能 無法完全解決二叉查詢樹的問題 絕對平衡的二叉樹,更耗效能 根本解決了紅黑數的問題 由於...