數據庫索引原理
索引的目的在於提高查詢效率,索引就像是書的目錄,是與表或視圖關聯的磁盤上結構,可以加快從表或視圖中檢索行的速度。 索引的原理在於使用空間換時間,索引會將建立的索引KEY存儲在N叉樹(BTree)。BTree適合在磁盤存儲設備上組織動態查找表,這些數據結構以某種方式引用(指向)數據。
磁盤IO預讀
計算機操作系統考慮到磁盤IO操作的高昂代價,當一次IO操作時,會把當前磁盤頁和相鄰的數據也讀取到內存緩存區。
索引的結構數據
索引是使用B+樹實現的數據結構。
image.png
每個磁盤塊包含:數據項(藍色)、指針(黃色);非葉子節點只不存儲真實的數據,只存儲指引搜索方向的數據項,真實的數據存儲在葉子結點。P1指向小於17的磁盤塊,P2指向17和35之間的磁盤塊,P3表示大於35的磁盤塊。
二叉樹
二叉查找樹是一種查找效率非常高的數據結構,二叉查找樹的結構不適合數據庫,因為它的查找效率與層數相關。它有三個特點。
- 每個節點最多隻有兩個子樹。
- 左子樹都為小於父節點的值,右子樹都為大於父節點的值。
- 在n個節點中找到目標值,一般只需要log(n)次比較。
BTree樹
這種數據結構,非常有利於減少讀取硬盤的次數。假定一個節點可以容納100個值,那麼3層的B樹可以容納100萬個數據。
image.png
B樹的特點也有三個。
- 一個節點可以容納多個值。比如上圖中,最多的一個節點容納了4個值。
- 除非數據已經填滿,否則不會增加新的層。也就是說,B樹追求"層"越少越好。
- 子節點中的值,與父節點中的值,有嚴格的大小對應關係。
數據庫索引設計與優化文檔目錄
第1章 概述
第2章 表和索引結構
第3章 SQL處理過程
第4章 為SELETE語句創建理想的索引
第5章 前瞻性的索引設計
第6章 影響索引設計過程的因素
第7章 被動式索引設計
第8章 為表連接設計索引
第9章 星型連接
第10章 多索引訪問
第11章 索引和索引重組
第12章 數據庫管理系統相關的索引限制
第13章 數據庫索引選項
第14章 優化不是完美的
第15章 其他估計事項
第16章 組織索引設計過程
資料資料方式:
轉發+關注後私信 【 MySQL】免費獲取
閱讀更多 JAVA技術刀 的文章