資料庫索引的原理及優化

2021-10-05 17:20:14 字數 988 閱讀 1857

在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用(指向)資料,這樣就可以在這些資料結構上實現高階查詢演算法。這種資料結構,就是索引。資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢、更新資料庫表中資料。索引的實現通常使用b樹及其變種b+樹。

b+樹。b+樹是應資料庫所需而出現的一種b樹的變形樹。

b+樹的特點:

(1)所有葉節點包含全部關鍵字及指向相應記錄的指標,而且葉節點中將關鍵字按大小順序排列,並且相鄰葉節點按大小順序相互鏈結起來。

(2)所有分支節點(可看做索引的索引)中僅包含它的各個子節點(即下一級的索引塊)中關鍵字的最大值即指向其子節點的指標。

(3)b+樹中,葉節點包含資訊,所有非葉結點僅起到索引作用,非葉節點中的每個索引項只含有對應子樹的最大關鍵字和指向該子樹的指標,不含有該關鍵字對應記錄的儲存位址。

(4)葉節點包含了所有的關鍵字,即在非葉節點出現的關鍵字也會出現在葉子節點中。

b+樹有兩個頭指標,乙個指向根節點,另乙個指向關鍵字最小的葉節點。b+樹進行兩種查詢運算:從最小關鍵字開始的順序查詢,另一種從根節點開始的多路查詢。

優化:innodb建議大部分表使用預設的自增的主鍵作為索引

mssql、db2使用的是b+tree,oracle及sysbase使用的是b-tree

為什麼說b+-tree比b 樹更適合實際應用中作業系統的檔案索引和資料庫索引?

1)b+樹的磁碟讀寫代價更低

b+樹的內部結點並沒有指向關鍵字具體資訊的指標。因此其內部結點相對於b樹更小。如果把所有同一內部結點的關鍵字存放在同一盤塊中,那麼盤塊所能容納的關鍵字數量也越多。一次性讀入記憶體中的需要查詢的關鍵字也就越多。相對來說io讀寫次數也就降低了。

2) b+-tree的查詢效率更加穩定

由於非終結點並不是最終指向檔案內容的結點,而只是葉子結點中關鍵字的索引。所以任何關鍵字的查詢必須走一條從根結點到葉子結點的路。所有關鍵字查詢的路徑長度相同,導致每乙個資料的查詢效率相當。

資料庫索引及優化

資料庫索引 一 索引的概念 索引是一種排好序的快速查詢的資料結構。索引本身也很大,不可能全部儲存在記憶體中,因此索引往往以索引檔案的形式儲存在磁碟上。我們平常所說的索引,如果沒有特別指明,都是指b樹 多路搜尋樹,並不一定是二叉的 結構組織的索引。其中聚集索引 次要索引 覆蓋索引 復合索引 字首索引 ...

資料庫索引優化原理,索引的工作機制

我們通過乙個簡單的例子來開始教程,解釋為什麼我們需要資料庫索引。假設我們有乙個資料庫表 employee,這個表有三個字段 列 分別是 employee name employee age 和employee address。假設表employee 有上千行資料。現在假設我們要從這個表中查詢出所有名...

資料庫索引 索引優化

二 三星索引 三 合適設計理想索引 謂詞簡單謂詞和複雜謂詞 where字句中的每個條件稱為乙個謂詞。過濾因子 描述了謂詞的選擇性,即表中滿足謂詞條件的記錄行數所佔的比例 過濾因子 ff 結果集的數量 錶行的數量 平均過濾因子 1 不同列值的數量 索引片及匹配列 乙個索引定義乙個索引片,如果where...