即搜索引導,索引是一個特殊的數據結構,其存儲的關鍵信息與詳細信息的位置對應關係,加速索引mysql
索引的影響:算法
索引的應用場景:sql
查詢操做較多,寫入較少;本質原理是儘量減少搜索範圍數據庫
數據庫的數據最終存儲到了硬盤上,當一次IO時,不光把當前磁盤地址的數據,而是把相鄰的數據也都讀取到內存緩衝區內,由於局部預讀性原理告訴咱們,當計算機訪問一個地址的數據的時候,與其相鄰的數據也會很快被訪問到。每一次IO讀取的數據咱們稱之爲一頁(page)數據結構
索引的目的:儘量減低io次數,算法支持:二分查找法,應該儘量的將數據量小的字段做爲索引code
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);