一、概念
MySQL官方對索引的定義為:
索引(Index)是幫助MySQL高效擷取資料的資料結構。(索引是資料結構)
排好序的快速查找資料結構。
即除資料本身之外,資料庫還維護着一個滿足特定查找算法的資料結構,這些資料結構以某種方式指向資料,這樣就可以在這些資料結構的基礎上實作進階查找算法,這種資料結構就是索引。
二、分類
1.單值索引:即一個索引隻包含單個列,一個表可以有多個單列索引;
2.唯一索引:索引列的值必需唯一,但允許有空值;
3.複合索引:即一個索引包含多個列;
三、優缺點
優勢:
1.類似大學生圖書館建書目索引,提高資料檢索的效率,減低資料庫的IO成本;
2.通過索引列對資料進行排序,降低資料排序的成本,降低了CPU的消耗。
劣勢:
1.實際上索引也是一張表,該表儲存了主鍵和索引字段,并指向實體表的記錄,是以索引列也是占用空間的;
2.雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行insert、update和delete.更新表不僅要儲存資料,還要儲存索引檔案。每次更新添加了索引列的字段,都會調整因為更新所帶來的鍵值變化後的索引資訊。
四、基本文法
1.建立
create [unique] index indexName on table(columnName(length));
alter table add [unique] index[indexName] on (columnName(length));
2.删除
drop index[indexName] on table;
3.檢視
show index from table;
五、索引的作用流程
六、建立索引的場景
1.主鍵自動建立唯一索引;
2.頻繁作為查詢條件的字段應該建立索引;
3.查詢中與其它表關聯的字段,外鍵關系建立索引;
4.頻繁更新的字段不适合建立索引;
5.where條件用不到的字段不建立索引;
6.單值/複合索引,優先考慮建複合索引;
7.查詢中排序的字段;
8.查詢中統計或者分組字段;
七、不能建立索引的場景
1.表記錄太少
2.經常增删改的表:然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行insert、update和delete.更新表不僅要儲存資料,還要儲存索引檔案。
3.資料重複且分布平均的表字段,是以應該隻為最經常查詢和最經常排序的資料列建立索引。即某個資料列包含許多重複内容,為它建立索引沒有太大實際效果。