1. 程式人生 > >數據庫的索引類型及實現方式

數據庫的索引類型及實現方式

缺點 mar 訪問速度 eat 散列 主鍵索引 nbsp 常數 col

註:此文復制而來,只為便於學習!
1、索引定義
  數據庫索引好比是一本書前面的目錄,能加快數據庫的查詢速度。索引是對數據庫表中一個或多個列(例如,employee 表的姓氏 (lname) 列)的值進行排序的結構。如果想按特定職員的姓來查找他或她,則與在表中搜索所有的行相比,索引有助於更快地獲取信息。

2、建立索引的優缺點:
優點:
1.大大加快數據的檢索速度;
2.創建唯一性索引,保證數據庫表中每一行數據的唯一性;
3.加速表和表之間的連接;
4.在使用分組和排序子句進行數據檢索時,可以顯著減少查詢中分組和排序的時間。
缺點:

  1.索引需要占用數據表以外的物理存儲空間

  2.創建索引和維護索引要花費一定的時間

  3.當對表進行更新操作時,索引需要被重建,這樣降低了數據的維護速度。
3、索引類型:
根據數據庫的功能,可以在數據庫設計器中創建索引:唯一索引、主鍵索引和聚集索引。 盡管唯一索引有助於定位信息,但為獲得最佳性能結果,建議改用主鍵或唯一約束。

唯一索引: UNIQUE 例如:create unique index stusno on student(sno);
表明此索引的每一個索引值只對應唯一的數據記錄,對於單列惟一性索引,這保證單列不包含重復的值。對於多列惟一性索引,保證多個值的組合不重復。
主鍵索引: primary key
數據庫表經常有一列或列組合,其值唯一標識表中的每一行。該列稱為表的主鍵。 在數據庫關系圖中為表定義主鍵將自動創建主鍵索引,主鍵索引是唯一索引的特定類型。該索引要求主鍵中的每個值都唯一。當在查詢中使用主鍵索引時,它還允許對數據的快速訪問。

聚集索引(也叫聚簇索引):cluster
在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。一個表只能包含一個聚集索引。 如果某索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。與非聚集索引相比,聚集索引通常提供更快的數據訪問速度。
 
4、索引的實現方式
1 B+樹
    我們經常聽到B+樹就是這個概念,用這個樹的目的和紅黑樹差不多,也是為了盡量保持樹的平衡,當然紅黑樹是二叉樹,但B+樹就不是二叉樹了,節點下面可以有多個子節點,數據庫開發商會設置子節點數的一個最大值,這個值不會太小,所以B+樹一般來說比較矮胖,而紅黑樹就比較瘦高了。
關於B+樹的插入,刪除,會涉及到一些算法以保持樹的平衡,這裏就不詳述了。ORACLE的默認索引就是這種結構的。
如果經常需要同時對兩個字段進行AND查詢,那麽使用兩個單獨索引不如建立一個復合索引,因為兩個單獨索引通常數據庫只能使用其中一個,而使用復合索引因為索引本身就對應到兩個字段上的,效率會有很大提高。

2 散列索引
第二種索引叫做散列索引,就是通過散列函數來定位的一種索引,不過很少有單獨使用散列索引的,反而是散列文件組織用的比較多。
散列文件組織就是根據一個鍵通過散列計算把對應的記錄都放到同一個槽中,這樣的話相同的鍵值對應的記錄就一定是放在同一個文件裏了,也就減少了文件讀取的次數,提高了效率。
散列索引呢就是根據對應鍵的散列碼來找到最終的索引項的技術,其實和B樹就差不多了,也就是一種索引之上的二級輔助索引,我理解散列索引都是二級或更高級的稀疏索引,否則桶就太多了,效率也不會很高。

3 位圖索引
位圖索引是一種針對多個字段的簡單查詢設計一種特殊的索引,適用範圍比較小,只適用於字段值固定並且值的種類很少的情況,比如性別,只能有男和女,或者級別,狀態等等,並且只有在同時對多個這樣的字段查詢時才能體現出位圖的優勢。
位圖的基本思想就是對每一個條件都用0或者1來表示,如有5條記錄,性別分別是男,女,男,男,女,那麽如果使用位圖索引就會建立兩個位圖,對應男的10110和對應女的01001,這樣做有什麽好處呢,就是如果同時對多個這種類型的字段進行and或or查詢時,可以使用按位與和按位或來直接得到結果了。

B+樹最常用,性能也不差,用於範圍查詢和單值查詢都可以。特別是範圍查詢,非得用B+樹這種順序的才可以了。
HASH的如果只是對單值查詢的話速度會比B+樹快一點,但是ORACLE好像不支持HASH索引,只支持HASH表空間。
位圖的使用情況很局限,只有很少的情況才能用,一定要確定真正適合使用這種索引才用(值的類型很少並且需要復合查詢),否則建立一大堆位圖就一點意義都沒有了。

數據庫的索引類型及實現方式