關於innodb的索引,可以分為聚簇索引,輔助索引,都是以b+tree 為底層資料結構。
聚簇索引 只是資料的儲存方法。以主鍵為key,如果表中沒有主鍵,則會選擇乙個有唯一索引的列作為key,如果都沒有,innodb會為我們建立乙個唯一列作為key。所有的資料都存在葉子節點上,並且是按順序儲存的。如果我們的主鍵插入的資料都是隨機的,就可能會導致多個頁分列。從而影響插入的效率。
而輔助索引也稱為普通索引,二級索引。它的葉節點只存了主鍵的值。我們通常說的索引更多的就是指它了。在查詢時每張表只能使用乙個索引,如果有乙個多列的大資料查詢,這個時候就需要有乙個多列索引來幫我們提高查詢效率,尤其是查詢中包含排序,分組時。在建多列索引時需要考慮以下一些因素:
1,盡可能讓索引覆蓋更多地列,尤其是排序分組字段。
2,讓選擇性更好的列放在第一位。
3,索引盡可能保持乙個通用性(其他查詢也能用到)。
4,如果索引中某個列是範圍查詢,那麼索引後面的字段是用不上的。
5,如果在某個欄位上用了函式方法(如日期處理),則這個欄位也是走不了索引的。
我們都知道索引可以提高查詢的速度,那麼索引是不是越多越好呢?肯定不是,主要有倆點:
1,索引太多會影響資料更新的速度。
2,索引太多會需要更大的儲存空間。
b+樹
b+樹是由b樹發展而來,主要用於檔案索引系統,因為它可以減少磁碟io的次數。
他有以下一些特點:
1.非葉子結點的子樹指標與關鍵字個數相同;
2.非葉子結點的子樹指標p[i],指向關鍵字值屬於[k[i], k[i+1])的子樹(b-樹是開區間);
3.為所有葉子結點增加乙個鏈指標(這樣在範圍查詢時效率更高);
4.所有關鍵字都在葉子結點出現;
b+樹的複雜度為 o(log d n) 以d為底, d為度。網上很多直接寫logn。
Mysql InnoDB 系列 關於一致讀
系列文章 mysql innodb 系列 innodb 架構 mysql innodb 系列 鎖 mysql innodb 系列 事務模型 一致讀 consistent read 在 mysql技術內幕 第二版 中稱為一致性非鎖定讀 consistent nonlocking read 是指inno...
MySQL Innodb 索引的原理
回想四年前,我在學習mysql的索引這塊的時候,老師在講索引的時候,是像下面這麼說的 索引就像一本書的目錄。而當使用者通過索引查詢資料時,就好比使用者通過目錄查詢某章節的某個知識點。這樣就幫助使用者有效地提高了查詢速度。所以,使用索引可以有效地提高資料庫系統的整體效能。嗯,這麼說其實也對。但是呢,大...
MySQL InnoDB的體系架構
innodb儲存引擎是乙個完整支援acid事務的mysql儲存引擎,其特點是 行鎖設計,支援mvcc,支援外來鍵,提供一致性非鎖定讀,同時被設計用來最有效的利用以及使用記憶體和cpu 1.innodb體系架構 圖中簡單顯示了innodb的儲存引擎的體系架構,從圖中可見,innodb有多個記憶體塊,可...