Mysql索引之理論知識
一:索引介紹
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索引之理論知識