一、索引的定義
在關係數據庫中,索引是一種與表有關的數據庫結構,它可以使對應於表的SQL語句執行得更快。索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。當表中有大量記錄時,若要對錶進行查詢,第一種搜索信息方式是全表搜索,是將所有記錄一一取出,和查詢條件進行一一對比,然後返回滿足條件的記錄,這樣做會消耗大量數據庫系統時間,並造成大量磁盤I/O操作;第二種就是在表中建立索引,然後在索引中找到符合查詢條件的索引值,最後通過保存在索引中的ROWID(相當於頁碼)快速找到表中對應的記錄。
索引是一個單獨的、物理的數據庫結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單。
索引提供指向存儲在表的指定列中的數據值的指針,然後根據您指定的排序順序對這些指針排序。數據庫使用索引的方式與您使用書籍中的索引的方式很相似:它搜索索引以找到特定值,然後順指針找到包含該值的行。
在數據庫關係圖中,可以在選定表的“索引/鍵”屬性頁中創建、編輯或刪除每個索引類型。當保存索引所附加到的表,或保存該表所在的關係圖時,索引將保存在數據庫中。
二、索引分類
在oracle數據庫中,索引按照索引機制大致可分爲三類:
1、B-tree索引
2、位圖索引
3、全文索引
在mysql數據庫中,索引按索引機制大致可分爲
1、R-tree索引
2、B-tree索引
3、hash索引
在SQL Server數據庫中,索引按索引機制大致可分爲:
1、聚簇索引
2、非聚簇索引
1) 堆上的非聚簇索引
2) 聚簇索引上的非聚簇索引
三、Oracle中各個索引使用的場景
1、B-tree索引
—OLAP系統
—主鍵或唯一性約束
—鍵值重複率低的字段
2、位圖索引
—OLAP系統
—鍵值重複率高的字段
—特定類型的數據
—不適宜在頻繁DML的表上創建
3、全文索引
—當字段裏存儲的都是文本時適合用全文索引,常用於搜索文字
四、總結
對於一個海量數據庫來說,沒有索引是致命的,但是選錯索引同樣的致命的。
那麼我們接下來對比一下各個索引的優劣:
1、全文索引:
優勢:索引不是按鍵值存儲,而是通過分詞的方式存儲、模糊查詢比較快
劣勢:佔用大量空間、Bug比較多,難以維護
2、位圖索引與B-tree索引對比:
位圖索引更加節省空間
對於高重複率鍵值上的count、and、or等操作性能有幫助
通過上面我們已經簡單的瞭解到各個索引所適用的場景和各自的優勢。那麼我們應該如何選擇索引呢?我們可以參考下面的提示來幫助我們選擇合適的索引:
1、如果字段數據的重複率不是很高,那麼考慮使用B-tree索引
2、如果自動斷數據的重複率較高,並且查詢中有特定的查詢方式(比如列之間有或、與等邏輯運算),則要考慮使用位圖索引。
3、如果需要對列中的字段進行模糊查詢或者語言類的查詢,則應該考慮使用全文索引。