03 深入淺出索引上下

2021-10-14 13:21:08 字數 1371 閱讀 3176

三種索引:全文索引,雜湊索引,b+樹索引

索引維護:頁**。(隨機插入,向右**)

索引的選擇:身份證id or 自增主鍵

效能 + 儲存。

效能:身份證id,是隨機插入,頁**是中間**,可能會造成一定的儲存浪費,**次數頁比較多。但是自增主鍵,只有頁滿才會將新點**到下乙個頁,效率是最高的。

儲存:乙個b+樹節點,儲存的身份證id數量 < 自增主鍵數量不同。

以上對應於:mysql 45講:深入淺出索引1

回表:使用了輔助索引,搜尋完輔助索引,還要再搜尋聚集索引。

select * from t where k between 3 and 5流程:

在 k 索引樹上找到 k=3 的記錄,取得 id = 300;

再到 id 索引樹查到 id=300 對應的 r3;

在 k 索引樹取下乙個值 k=5,取得 id=500;

再回到 id 索引樹查到 id=500 對應的 r4;

在 k 索引樹取下乙個值 k=6,不滿足條件,迴圈結束。

覆蓋索引:輔助索引直接查詢到所需要的資訊。

問題::在乙個市民資訊表上,是否有必要將身份證號和名字建立聯合索引?

有乙個高頻請求,要根據市民的身份證號查詢他的姓名。

是要建立聯合索引的。因為這樣會造成覆蓋索引

最左字首原則:

問題:在建立聯合索引的時候,如何安排索引內的字段順序。

第一原則是:如果通過調整順序,可以少維護乙個索引,那麼這個順序往往就是需要優先考慮採用的。

如果既有聯合查詢,又有基於 a、b 各自的查詢呢?查詢條件裡面只有 b 的語句,是無法使用 (a,b) 這個聯合索引的,這時候你不得不維護另外乙個索引,也就是說你需要同時維護 (a,b)、(b) 這兩個索引。

第二原則是:索引空間。

mrr優化

multi-range read優化可適用於range,ref,eq_ref型別的查詢。(檢索輔助索引之後,將結果在記憶體中排序,之後檢索聚集索引。)

multi-range read還可以將某些範圍查詢,拆分為鍵值對,以此來進行批量的資料查詢。這樣做的好處是可以在拆分過程中,直接過濾一些不符合查詢條件的資料,

索引下推:icp優化。

當進行索引查詢時,首先根據索引來查詢記錄,然後再根據where條件來過濾記錄。在支援index condition pushdown後,mysql資料庫會在取出索引的同時,判斷是否可以進行where條件的過濾,也就是將where的部分過濾操作放在了儲存引擎層

問題:聯合索引(name, age)。檢索出表中名字第乙個字是張,而且年齡是 10 歲的所有男孩。

索引下推優化(index condition pushdown), 可以在索引遍歷過程中,對索引中包含的字段先做判斷,直接過濾掉不滿足條件的記錄,減少回表次數

深入淺出索引(上)

我們都知道資料庫的索引是用來提公升檢索速度的,但是索引究竟內部是怎麼工作的呢,就來說說這個話題8 索引就像書的目錄一樣,幫助我們更快的查詢到我們需要的資料。索引的種類有很多種,接下來主要介紹三種常見,也比較簡單的資料結構,分別是雜湊表,有序陣列和搜尋樹。然後從使用的角度分析一下,三者的區別 雜湊表是...

04 深入淺出索引(上)

1.索引的作用 提高資料查詢效率,就像書的目錄一樣。2.常見索引模型 雜湊表 有序陣列 搜尋樹 3.雜湊表 鍵 值 key value 4.雜湊思路 把值放在陣列裡,用乙個雜湊函式把key換算成乙個確定的位置,然後把value放在陣列的這個位置 5.雜湊衝突的處理辦法 鍊錶 6.雜湊表適用場景 只有...

MySQL學習 3 深入淺出索引(上)

innodb的索引模型 參考資料 寫在後面 環境 mysql5.7.24,for linux glibc2.12 x86 64 簡單來說,索引的出現其實就是為了提高資料查詢 的效率,就像書的目錄一樣。對於資料庫的表而言,索引其實就是它的 目錄 用於提高讀寫效率的資料結構有很多,以下介紹三種常見 也比...