innodb索引的幾個問題?

從數據結構角度

1:B+樹索引(o(logn)
2:hash索引 (key=>value)
3:全文索引
4:R-tree索引

物理角度

1:彙集索引
2:飛彙集索引

邏輯角度

1:主鍵索引
2:普通索引
3:惟一索引

爲何會選擇B+樹數據結構來存儲數據

在B+樹中,非葉子節點上是不存數據的,僅存儲鍵值。由於在數據中的頁大小是固定的,Innodb中頁的默認大小是16kb,若是不存儲數據,那麼節點就能夠存儲更多的鍵值,相應的樹的節數更大,對於一樣的數據量來講,須要的樹高就會變低。如此一來查詢數據的時候進行磁盤的IO次數就會減小,提高查詢效率。
因爲B+樹的節數等於鍵值數量,假設B+樹的一個結點能夠存儲1000個鍵值,那麼3層的B+樹能夠存儲100010001000=10億個數據。而且通常節點是常駐內存的,因此查找10億個數據,只要兩次IO
B+樹的葉子節點中的索引數據是按照順序排序的,而且葉子節點間是經過雙向鏈表進行連接數據結構

主鍵索引和普通索引的差異

主鍵索引code

主鍵索引的葉子節點存的整行數據,主鍵索引也稱爲聚簇索引

非主鍵索引排序

非主鍵索引的葉子節點內容存在的主鍵的值,非主鍵索引也成爲二級索引或是普通索引

基於主鍵索引和普通索引的查詢有什麼區別?

主鍵索引,索引查詢出來直接就是查詢的值
非主鍵索引,先搜索查到主鍵索引,而後主鍵索引在搜索一次。這個過程成爲回表索引

相關文章
相關標籤/搜索