1. 程式人生 > >Mysql索引之理論知識

Mysql索引之理論知識

唯一索引 數據庫 查詢效率 idt left 掃描 b+ 節點 大小

一:索引介紹

1:什麽是索引?

  索引就好比是一本書的目錄,它會讓你更快的找到內容,讓你獲取數據更有目的性,從而提高數據庫檢索數據的性能。

2:索引作用:

  優化查詢 select

  查詢的三種情況:①緩存查詢 redis

          ②全表掃描

          ③索引掃描

  查詢效率 ① > ③ > ②

二:索引種類

索引的種類

  Btree (btree b+tree b*tree) mysql默認用的是Btree

  Rtree

  HASH

  FullText

1: b+tree:

技術分享圖片

2: b*tree:

技術分享圖片

基本原理同b+tree,不同的是在枝節點,也存入了相鄰枝節點的地址,目的也是為了方便範圍查詢

三:Btree分類

一:btree分類(這裏的分類不涉及btree b+tree b*tree 都指btree)

1:聚集索引

  基於主鍵,自動生成的,一般是建表時創建主鍵.如果沒有主鍵,自動選擇唯一鍵做為聚集索引 (主鍵一般設置為id列,理由是int類型所占的內存小,而葉子節點大小是固定的,如果用string類型來來作為主鍵設置索引,同一葉子節點存儲的索引數量少了,那麽必然會產生更多的葉子節點存儲索引,這樣整個樹的高度就會變高,查詢效率就會變慢)

2:輔助索引

  人為創建的(普通,覆蓋),如有大量這樣的select條件: where name = “xxx” 那麽就可以根據name字段創建輔助索引,葉子節點存儲該列值和該列值的id值(聚集索引值),存儲該列值的id值是為了回表查詢,如需求不僅僅是查找到名字,還要查找age,gender,那麽這個時候就需要根據id值回表查詢,掃描聚集索引建的樹。如果建立的是覆蓋索引(name,age,gender三個字段)此時就沒有回表的需要。

3:唯一索引

  人為創建(普通索引,聚集索引)

二:聚集索引和輔助索引的對比

1:聚集索引

  葉子結點,按照主鍵列的順序,存儲的是整行數據,就是真正的數據頁

2:輔助索引

  葉子結點,列值排序之後,存儲到葉子結點+對應的主鍵的值,便於回表查詢

Mysql索引之理論知識