索引可以加快資料檢索速度。如果沒有索引,資料庫需要掃描每一行來尋找符合的記錄。有了索引,它可以直接跳到相關的行。索引是一種獨立的資料結構,它將值對應到位置。書籍索引的工作原理也是如此。你找一個詞條,然後找出它的頁碼。你不需要翻閱每一頁來尋找。資料庫也是如此。
索引是有代價的。它們會佔用空間。由於索引也需要更新,因此會降低插入、更新和刪除操作的速度。每次寫入操作的成本都會增加。其好處是讀取速度更快。對於讀取密集型工作負載,索引至關重要。對於寫入密集型工作負載,過多的索引會損害效能。選擇要建立索引的欄位需要了解查詢模式。 WHERE 子句、JOIN 條件和 ORDER BY 子句中使用的欄位是理想的選擇。低基數的欄位(例如布林標誌)則不是好的選擇,因為索引無法有效縮小搜尋範圍。複合索引涵蓋多個列,可以處理基於多個欄位進行篩選的查詢。複合索引中列的順序很重要。資料庫可以使用複合索引來處理僅基於前導列的查詢,但不能只處理基於後導列的查詢。索引設計是一種權衡。目標是在不增加不必要的寫入速度的前提下,加快關鍵查詢的速度。
索引類型
- B 樹-大多數資料庫的預設樹,適用於範圍查詢
- 哈希——快速相等性查找,不支援範圍查找
- 點陣圖-低基數列,分析查詢
- 全文搜尋
- 複合索引-一個索引中包含多個列
索引是一種捷徑。它犧牲寫入速度和儲存空間來換取讀取速度。在對讀取速度要求極高的場景下,應該使用索引。
Comments (3)
Leave a comment