1、索引是什么
索引(Index)是幫助MySQL高效獲取數據的數據結構。可以得到索引的本質:索引是數據結構。
可以理解為“排好序的快速查找數據結構”
在數據之外,數據庫系統還維護着滿足特定查找算法的數據結構,這些數據結構以某種方式引用(指向)數據,
這樣就可以在這些數據結構上實現高級查找算法,這種數據結構就是索引。
2、優勢
類似大學圖書館建書目索引,提高數據檢索效率,降低數據庫的IO成本。
通過索引對數據進行排序,降低數據排序的成本,降低了CPU的消耗。
3、劣勢
實際上索引也是一張表,該表保存了主鍵與索引字段,並指向實體表的記錄,所以索引列也是要占空間的。
雖然索引大大提高了查詢速度,同時確會降低更新表的速度,如對表進行INSERT、UPDATE、DELETE。
因為更新表時,MySQL不僅要保存數據,還要保存一下索引文件每次更新添加了索引列的字段。
都會調整因為更新所帶來的鍵值變化后的索引信息。
4、索引的分類
單值索引
即一個索引只包含單個列,一個表可以有多個單列索引。
唯一索引
索引列的值必須唯一,但允許有空值。
復合索引
即一個索引包含多個列。
5、基本語法
6、MySQL索引結構
BTree索引
Hash索引
full-text全文索引
R-Tree索引
7、哪些情況需要創建索引
①主鍵自動建立唯一索引
②頻繁作為查詢條件的字段應該創建索引
③查詢中與其他表關聯的字段,外鍵關系建立索引
④頻繁更新的字段不適合建立索引,因為每次更新不單單是更新了記錄還會更新索引
⑤WHERE條件里用不到的字段不創建索引
⑥單鍵/組合索引的選擇問題,who?(在高並發下傾向創建組合索引)
⑦查詢中排序的字段,排序的字段若通過索引去訪問將大大提高排序速度
⑧查詢中統計或者分組字段
8、哪些情況不要創建索引
①表記錄太少
②經常增刪改的表
提高了查詢速度,同時卻會降低更新表的速度,如對表進行INSERT、UPDATE、和DELETE。
因為更新表時,MySQL不僅要保存數據,還要保存一下索引文件。
數據重復且分布平均的表字段,因此應該只為最經常查詢和最經常排序的數據建立索引。
③注意,如果某個數據列包含許多重復的內容,為它建立索引就沒有太大的實際效果。