數據庫索引

07.21自我總結

數據庫索引

1.什麼是索引?

即搜索引導,索引是一個特殊的數據結構,其存儲的關鍵信息與詳細信息的位置對應關係,加速索引mysql

索引的影響:算法

  1. 正確使用索引才能加速查詢;
  2. 索引須要額外的佔用數據空間;
  3. 索引的加入,使數據的crud變慢

索引的應用場景:sql

​ 查詢操做較多,寫入較少;本質原理是儘量減少搜索範圍數據庫

2.磁盤IO

數據庫的數據最終存儲到了硬盤上,當一次IO時,不光把當前磁盤地址的數據,而是把相鄰的數據也都讀取到內存緩衝區內,由於局部預讀性原理告訴咱們,當計算機訪問一個地址的數據的時候,與其相鄰的數據也會很快被訪問到。每一次IO讀取的數據咱們稱之爲一頁(page)數據結構

索引的目的:儘量減低io次數,算法支持:二分查找法,應該儘量的將數據量小的字段做爲索引code

3.索引數據結構

b+樹視頻

​ 在b+樹中 葉子節點纔是存儲真實數據的,葉子數量越多,樹的層級越高,致使IO次數增長索引

​ 要避免這個問題,在葉子節點中儘量的存儲更多的數據, 應該將數據量小的字段做爲索引內存

最左匹配原則

當b+樹的數據項是複合的數據結構,b+樹會按照從左到右的順序來創建搜索樹,也就是說根據sql語句由左至右順序寫入的搜索字段,會優先搜索最左邊的字段條件,再匹配下一個字段條件,即索引的最左匹配特性.io

彙集索引

彙集索引中包含了全部字段的值,若是擬製定了主鍵,主鍵就是彙集索引;
若是沒有則找一個非空且惟一的字段做爲彙集索引;
若是也沒有這樣的列,innoDB會在表內自動產生一個彙集索引id,它是自增的
彙集索引中存儲了全部的數據

輔助索引

除了彙集索引以外的索引都稱之爲輔助索引或第二索引,包括 foreign key 與 unique

輔助索引的特色:
其葉子節點保存的是索引數據與所在行的主鍵值,InnoDB用這個 主鍵值來從彙集索引中搜查找數據

覆蓋查詢

覆蓋索引指的是須要的數據僅在輔助索引中就能找到:

回表查詢

若是要查找的數據在輔助索引中不存在,則須要回到彙集索引中查找,這種現象稱之爲回表
也就是說搜索字段爲非索引字段時,查詢搜索字段數據時,先根據索引字段獲取主鍵值,在根據主鍵值搜索查詢的字段.

小結:(判斷數據查詢的快慢實際上是如何正確使用索引)

#爲表中某個字段添加索引
create index index_name on table_name(column);
# index_name表示索引名
# table_name表示表名
# column表示字段名

#添加主鍵
alter table table_name add primary key(column);
  1. 使用佔用空間最小的字段來做爲索引;
  2. 不要再一行中存儲太多的數據,例如小說,視頻,若是字段太多能夠分表 ;
  3. 儘可能使用覆蓋查詢 ;
  4. 若是字段區分度低(重複度高),創建索引是沒有意義,反過來講應該將區分度高的字段做爲索引
  5. 不要再等號的左邊作運算,例如:select count() from usr where id 3 = 6; 也會遍歷全部記錄
  6. 模糊匹配中,%儘可能不要寫在前面
  7. and語句中會自動找一個具的字段優先執行,因此咱們應該在and語句中至少包含一個具有索引的字段
  8. or語句要避免使用,若是要用則保證全部字段都有索引才能加速
  9. 聯合索引中,順序應該將區分度最高的放到左邊,最低的放右邊
相關文章
相關標籤/搜索