數據庫索引

原文轉自:http://blog.csdn.net/yfkiss/article/details/7325458

概念:
索引是由用戶創建的、能夠被修改和刪除的、實際存儲於數據庫中的物理存在;創建索引的目的是使用戶能夠從整體內容直接查找到某個特定部分的內容。

優缺點:
一般來說,索引能夠提高查詢,但是會增加額外的空間消耗,並且降低刪除、插入和修改速度

分類:
1.聚集索引:表數據按照索引的順序來存儲的。
2.非聚集索引:表數據存儲順序與索引順序無關。
由於聚集索引表的數據需要按照索引的順序來存儲,因此,一張表上只能創建一個聚集索引,非聚集索引則沒有這方面的限制
聚集索引對於那些經常要搜索範圍值的列或者查詢時經常需要對某列進行排序的情況特別有效,但是由於需要保證數據和索引順序的一致性,會帶來對數據增刪改效率降低。

常用索引數據結構:
多叉平衡搜索樹:B樹 / B+樹 / B*樹
B樹

1. d爲大於1的一個正整數,稱爲B-Tree的
2. h爲一個正整數,稱爲B-Tree的高度
3. 每個非葉子節點由n-1個key和n個指針組成,其中d<=n<=2d。
4. 每個葉子節點最少包含一個key和兩個指針,最多包含2d-1個key和2d個指針,葉節點的指針均爲null 。
5. 所有葉節點具有相同的深度,等於樹高h。
6. key和指針互相間隔,節點兩端是指針。
7. 一個節點中的key從左到右非遞減排列。
8. 所有節點組成樹結構。
9. 每個指針要麼爲null,要麼指向另外一個節點。
10. 如果某個指針在節點node最左邊且不爲null,則其指向節點的所有key小於v(key1),其中v(key1)爲node的第一個key的值。
11. 如果某個指針在節點node最右邊且不爲null,則其指向節點的所有key大於v(keym),其中v(keym)爲node的最後一個key的值。
12. 如果某個指針在節點node的左右相鄰key分別是keyi和keyi+1且不爲null,則其指向節點的所有key小於v(keyi+1)且大於v(keyi)。
圖:



B+樹及B*樹都是B樹的變種,和B樹相比,B+樹:
1.每個節點的指針上限爲2d而不是2d+1。
2.內節點不存儲data,只存儲key;葉子節點不存儲指針。

B*樹則在B+樹的基礎上,在內節點上增加了指向兄弟的指針。

數據庫面對的常常是海量數據,即使索引也常常放到外存而不是內存。由於多叉樹樹的高度低,爲了儘量減少訪問磁盤的次數,採用多叉樹而不是二叉樹的結構。
Mysql MYISAM及InnoDB引擎採用的是B+樹作爲索引結構。區別在於,MYISAM採用的非聚集式索引,InnoDB採用的聚集式索引。

Hash索引
和B樹索引相比,Hash索引查詢更快,但是其也有一些問題
1. 和Hash索引相比,B+樹更適合作爲外存索引(Extensible Hash Tables Linear Hash Tables可以作爲外存索引)
2. 不支持範圍查詢;在組合鍵作爲索引的情況下,無法使用部分鍵值做查詢;.不能通過索引進行鍵值排序;
3. 由於Hash值有可能衝突,所以即使取滿足某個 Hash 鍵值的數據的記錄條數,也無法從 Hash 索引中直接完成查詢,還是要通過訪問表中的實際數據進行相應的比較。

位圖索引:

位圖索引是針對那些低基數,並且值不經常改變的列的
位圖索引並不適用於OLTP業務,OLTP一般都是有大量的併發事務來修改同樣的數據。bitmap主要就是設計來爲數據倉庫服務的,即應用於低基數超級大數據量查詢服務,而且只用在where clause裏包含and ,or,not,或equalityqueries(比如在and和or條件的查詢,在把bit轉換成rowid以前,就能很快的得到相應的boolean操作)。
擴展閱讀可以參看reference中位圖相關內容。


reference:
Introduction to Database Indexes: http://www.interspire.com/content/2006/02/15/introduction-to-database-indexes/
wiki : http://en.wikipedia.org/wiki/Database_index
MySQL索引背後的數據結構及算法原理:http://www.codinglabs.org/html/theory-of-mysql-index.html
書:海量數據庫解決方案
bitmap位圖索引:http://www.blogjava.net/leekiang/archive/2008/06/25/210564.html
Oracle編程高手箴言:位圖索引(Bitmap Index)的故事 :http://blog.csdn.net/carlwu/article/details/2319584
位圖索引簡介:http://www.baidot.com/tech/database/97ce9e31-948a-412b-8846-a2698cdfaf4d.aspx

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