概念
數據庫中索引(index)的概念與目錄的概念十分類似。如果某列出現在查詢的條件(where)中,而該列的數據是無序的,那麼查詢時只能從第一行開始一行一行地匹配。創建索引就是對某些特定列中的數據排序,生成獨立的索引表。當在某列上創建索引後,如果該列出現在查詢條件中,那麼數據庫系統會自動地引用該索引。先從索引表中查詢出符合條件記錄的ROWID,由於ROWID是記錄的物理地址,因此可以根據ROWID快速地定位到具體的記錄。當表中的數據非常多時,引用索引帶來的查詢效率非常可觀。
在處理一個請求時,數據庫可以使用可用索引有效地找到請求的行。當應用程序經常查詢某一特定行或特定範圍的行時,索引很有用。索引在邏輯上和物理上都獨立於數據。因此,刪除和創建索引對錶或其他索引沒有任何影響。在刪除索引後,所有應用程序仍然可以繼續運行。
優缺點
優點
-
大大加快數據的檢索速度,這也是創建索引的主要原因。
-
可以加速表和表之間的連接。
-
索引在實現數據的參照完整性方面特別有意義,例如,在外鍵列上創建索引可以有效地避免死鎖的發生,也可以防止當更新父表主鍵時,數據庫對字表的全表鎖定。
-
可以有效地減少磁盤I/O。
-
當使用分組GROUP BY和排序 ORDER BY字句進行數據檢索時,可以顯著減少查詢中分組和排序的時間,大大加快數據的檢索速度。
-
創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。
-
通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。
缺點
-
索引必須創建在表上,不能創建在視圖上。
-
創建索引和維護索引要消費時間,這種時間隨着數據量的增加而增加。
-
建立索引需要佔用屋裏空間,如果要簡歷聚簇索引,那麼需要的空間會很大。
-
當對錶中的數據進行增加、刪除和更新的時候,系統必須要有額外的時間來同時對索引進行更新維護,以維持數據和索引的一致性,所以,索引降低了數據的維護速度。