雖然索引可以加快查詢速度,提高 MySQL 的處理性能,但是過多地使用索引也會造成以下弊端:
創建索引和維護索引要耗費時間,這種時間隨着數據量的增加而增加。
除了數據表占數據空間之外,每一個索引還要占一定的物理空間。如果要建立聚簇索引,那么需要的空間就會更大。
當對表中的數據進行增加、刪除和修改的時候,索引也要動態地維護,這樣就降低了數據的維護速度。
注意:索引可以在一些情況下加速查詢,但是在某些情況下,會降低效率。
索引只是提高效率的一個因素,因此在建立索引的時候應該遵循以下原則:
在經常需要搜索的列上建立索引,可以加快搜索的速度。
在作為主鍵的列上創建索引,強制該列的唯一性,並組織表中數據的排列結構。
在經常使用表連接的列上創建索引,這些列主要是一些外鍵,可以加快表連接的速度。
在經常需要根據范圍進行搜索的列上創建索引,因為索引已經排序,所以其指定的范圍是連續的。
在經常需要排序的列上創建索引,因為索引已經排序,所以查詢時可以利用索引的排序,加快排序查詢。
在經常使用 WHERE 子句的列上創建索引,加快條件的判斷速度。
現在大家知道索引為啥能這么快了吧,其實就是一句話,通過索引的結構最大化的減少數據庫的IO次數,畢竟,一次IO的時間真的是太久了。。。