在 SQL 中,如果有大量資料存放在資料表的話,索引可以改善查詢時的效能,減少查詢時間。如同大部分的書本最前面都有目錄,我們可以透過目錄快速地找到想要的內容。
不過,不適當地使用索引的話,會額外占用磁碟或記憶體的空間,而沒有實際的改善查詢效能;而且在新增、修改、刪除資料時,都會耗費時間更新索引。
資料庫的索引使用的是一種叫 B+ Tree 的樹狀資料結構,搜尋的行為類似於二元樹 (Binary Tree),但是較為矮胖,可以避免造訪的葉節點過長導致 IO 次數過多的問題,也較沒有重新平衡樹狀結構導致的效能問題。
以下是常見的索引類型:
類型 | 說明 |
---|---|
Hash | 利用雜湊表 (Hash Table) 存取資料。(速度較快) |
Clustered | 資料經過排序並使用樹狀結構儲存。可藉由存在節點中的鍵值 (Key) 快速地取得資料。 |
Nonclustered | 資料列的索引有經過排序,但關聯的資料列不保證有經過排序,除非建立 Clustered 索引。 |
Unique | 保證沒有重複的資料,可以是 Clustered 或 Nonclustered 索引的屬性之一。 |