三種索引:全文索引,雜湊索引,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 簡單來說,索引的出現其實就是為了提高資料查詢 的效率,就像書的目錄一樣。對於資料庫的表而言,索引其實就是它的 目錄 用於提高讀寫效率的資料結構有很多,以下介紹三種常見 也比...