索引的本質
mysql官方對索引的定義為:索引(index)是幫助mysql高效獲取資料的資料結構。提取句子主幹,就可以得到索引的本質:索引是資料結構。
我們知道,資料庫查詢是資料庫的最主要功能之一。我們都希望查詢資料的速度能盡可能的快,因此資料庫系統的設計者會從查詢演算法的角度進行優化。最基本的查詢演算法當然是順序查詢(linear search),這種複雜度為o(n)的演算法在資料量很大時顯然是糟糕的,好在電腦科學的發展提供了很多更優秀的查詢演算法,例如二分查詢(binary search)、二叉樹查詢(binary tree search)等。如果稍微分析一下會發現,每種查詢演算法都只能應用於特定的資料結構之上,例如二分查詢要求被檢索資料有序,而二叉樹查詢只能應用於二叉查詢樹上,但是資料本身的組織結構不可能完全滿足各種資料結構(例如,理論上不可能同時將兩列都按順序進行組織),所以,在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用(指向)資料,這樣就可以在這些資料結構上實現高階查詢演算法。這種資料結構,就是索引。
b-tree和b+tree
目前大部分資料庫系統及檔案系統都採用b-tree或其變種b+tree作為索引結構,在本文的下一節會結合儲存器原理及計算機訪問原理討論為什麼b-tree和b+tree在被如此廣泛用於索引,這一節先單純從資料結構角度描述它們。
b-tree
為了描述b-tree,首先定義一條資料記錄為乙個二元組[key, data],key為記錄的鍵值,對於不同資料記錄,key是互不相同的;data為資料記錄除key外的資料。那麼b-tree是滿足下列條件的資料結構:
d為大於1的乙個正整數,稱為b-tree的度。
h為乙個正整數,稱為b-tree的高度。
每個非葉子節點由n-1個key和n個指標組成,其中d<=n<=2d。
每個葉子節點最少包含乙個key和兩個指標,最多包含2d-1個key和2d個指標,葉節點的指標均為null 。
所有葉節點具有相同的深度,等於樹高h。
key和指標互相間隔,節點兩端是指標。
乙個節點中的key從左到右非遞減排列。
所有節點組成樹結構。
每個指標要麼為null,要麼指向另外乙個節點。
如果某個指標在節點node最左邊且不為null,則其指向節點的所有key小於v(key1),其中v(key1)為node的第乙個key的值。
如果某個指標在節點node最右邊且不為null,則其指向節點的所有key大於v(keym),其中v(keym)為node的最後乙個key的值。
如果某個指標在節點node的左右相鄰key分別是keyi和keyi+1且不為null,則其指向節點的所有key小於v(keyi+1)且大於v(keyi)。
資料庫索引講解
1.索引的實現是通過b樹及其變種的b 樹來實現的。索引是一種經過一種演算法而定位的,可以減少檢索表的時間。2.為表設定索引要付出代價的 一是增加了資料庫的儲存空間,二是在插入和修改資料時要花費較多的時間 因為索引也要隨之變動 3.索引是建立在資料庫表中的某些列的上面。在建立索引的時候,應該考慮在哪些...
關於資料庫索引的優缺點講解
通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。可以大大加快 資料的檢索速度,這也是建立索引的最主要的原因。可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。在使用分組和排序 子句進行資料檢索時,同樣可以顯著減少查詢中分組和排序的時間。通過使用索引,可以在查詢的過程中,...
資料庫索引例項
1 漫談資料庫索引 在sql server2008中建立測試資料庫test,接著建立資料庫表並插入資料,sql 如下 use test ifexists select from information schema.tables where table name emp pay drop table...