感謝:https://www.cnblogs.com/zhaobingqing/p/7066112.htmlhtml
一、索引是什麼算法
索引(Index)是幫助MySQL高效獲取數據的數據結構。能夠獲得索引的本質:索引是數據結構。數據庫
能夠理解爲「排好序的快速查找數據結構」數據結構
在數據以外,數據庫系統還維護着知足特定查找算法的數據結構,這些數據結構以某種方式引用(指向)數據,併發
這樣就能夠在這些數據結構上實現高級查找算法,這種數據結構就是索引。高併發
二、優點htm
相似大學圖書館建書目索引,提升數據檢索效率,下降數據庫的IO成本。blog
經過索引對數據進行排序,下降數據排序的成本,下降了CPU的消耗。排序
三、劣勢索引
實際上索引也是一張表,該表保存了主鍵與索引字段,並指向實體表的記錄,因此索引列也是要佔空間的。
雖然索引大大提升了查詢速度,同時確會下降更新表的速度,如對錶進行INSERT、UPDATE、DELETE。
由於更新表時,MySQL不只要保存數據,還要保存一下索引文件每次更新添加了索引列的字段。
都會調整由於更新所帶來的鍵值變化後的索引信息。
四、索引的分類
單值索引
即一個索引只包含單個列,一個表能夠有多個單列索引。
惟一索引
索引列的值必須惟一,但容許有空值。
複合索引
即一個索引包含多個列。
五、基本語法
六、MySQL索引結構
BTree索引
Hash索引
full-text全文索引
R-Tree索引
七、哪些狀況須要建立索引
①主鍵自動創建惟一索引
②頻繁做爲查詢條件的字段應該建立索引
③查詢中與其餘表關聯的字段,外鍵關係創建索引
④頻繁更新的字段不適合創建索引,由於每次更新不僅僅是更新了記錄還會更新索引
⑤WHERE條件裏用不到的字段不建立索引
⑥單鍵/組合索引的選擇問題,who?(在高併發下傾向建立組合索引)
⑦查詢中排序的字段,排序的字段若經過索引去訪問將大大提升排序速度
⑧查詢中統計或者分組字段
八、哪些狀況不要建立索引
①表記錄太少
②常常增刪改的表
提升了查詢速度,同時卻會下降更新表的速度,如對錶進行INSERT、UPDATE、和DELETE。
由於更新表時,MySQL不只要保存數據,還要保存一下索引文件。
數據重複且分佈平均的表字段,所以應該只爲最常常查詢和最常常排序的數據創建索引。
③注意,若是某個數據列包含許多重複的內容,爲它創建索引就沒有太大的實際效果。