天天看點

【MySQL】MySQL中的索引

一、概念

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.資料重複且分布平均的表字段,是以應該隻為最經常查詢和最經常排序的資料列建立索引。即某個資料列包含許多重複内容,為它建立索引沒有太大實際效果。

八、性能分析

 explain

繼續閱讀