數據庫索引-掃盲

一、索引的物理存儲形式  

  從數據庫索引最終的物理存儲形式(數據結構)來講,索引可以分爲:B-TREE索引與Hash索引。   

1、B-TREE索引


B樹索引的結構如上圖所示。每個索記錄(如 )都是由多個索引條目(如 )組成的。

對於分支節點塊(包括根節點塊)來說,其所包含的索引條目都是按照順序排列的(缺省是升序排列,也可以在創建索引時指定爲降序排列)。每個索引條目(也可以叫做每條記錄)都具有兩個字段。第一個字段表示當前該分支節點塊下面所鏈接的索引塊中所包含的最小鍵值;第二個字段爲四個字節,表示所鏈接的索引塊的地址,該地址指向下面一個索引塊。在一個分支節點塊中所能容納的記錄行數由數據塊大小以及索引鍵值的長度決定。比如從上圖一可以看到,對於根節點塊來說,包含三條記錄,分別爲(0 B1)、(500 B2)、(1000 B3),它們指向三個分支節點塊。其中的0、500和1000分別表示這三個分支節點塊所鏈接的鍵值的最小值。而B1、B2和B3則表示所指向的三個分支節點塊的地址。

 對於葉子節點塊來說,其所包含的索引條目與分支節點一樣,都是按照順序排列的(缺省是升序排列,也可以在創建索引時指定爲降序排列)。每個索引條目(也可以叫做每條記錄)也具有兩個字段。第一個字段表示索引的鍵值,對於單列索引來說是一個值;而對於多列索引來說則是多個值組合在一起的。第二個字段表示鍵值所對應的記錄行的ROWID,該ROWID是記錄行在表裏的物理地址。如果索引是創建在非分區表上或者索引是分區表上的本地索引的話,則該ROWID佔用6個字節;如果索引是創建在分區表上的全局索引的話,則該ROWID佔用10個字節。

B-tree  特點 : 

l  適合與大量的增、刪、改(OLTP )

l  不能用包含OR 操作符的查詢;

l  適合高基數的列(唯一值多)

l  典型的樹狀結構;

l  每個結點都是數據塊;

l  大多都是物理上一層、兩層或三層不定,邏輯上三層;

l  葉子塊數據是排序的,從左向右遞增;

l  在分支塊和根塊中放的是索引的範圍(最小值);

2、hash索引


二、oracle的索引種類

1、普通索引

2、唯一索引

3、位圖索引

位圖索引主要針對大量相同值的列而創建。拿全國居民登錄一第表來說,假設有四個字段:姓名、性別、年齡、和身份證號,年齡和性別兩個字段會產生許多相同的值,性別只有男女兩種值,年齡,1到120(假設最大年齡120歲)個值。那麼不管一張表有幾億條記錄,但根據性別字段來區分的話,只有兩種取值(男、女)。那麼位圖索引就是根據字段的這個特性所建立的一種索引。

    位圖(bitmap)索引是另外一種索引類型,它的組織形式與B樹索引相同,也是一棵平衡樹。與B樹索引的區別在於葉子節點裏存放索引條目的方式不同。從前面我們知道,B樹索引的葉子節點裏,對於表裏的每個數據行,如果被索引列的值不爲空的,則會爲該記錄行在葉子節點裏維護一個對應的索引條目。而位圖索引則不是這樣,其葉子節點裏存放的索引條目如下圖所示


    假設某個表T裏所有的記錄在列C1上只具有三個值:010203。在表TC1列上創建位圖索引以後,則葉子節點的內容如圖9-14所示。可以看到,位圖索引只有三個索引條目,也就是每個C1列的值對應一個索引條目。位圖索引條目上還包含表裏第一條記錄所對應的ROWID以及最後一條記錄所對應的ROWID。索引條目的最後一部分則是由多個bit位所組成的bitmap,每個bit位就對應一條記錄。

三、mysql的索引種類


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章