說明關係型資料庫通過索引提公升查詢效率的背後原理

2021-10-06 00:15:27 字數 684 閱讀 9941

如果沒有索引,資料庫引擎需要通過全表掃瞄來查詢資料,這會產生大量的磁碟io。

關係型資料庫使用b+樹構建索引來加速加快查詢。b+樹是一種二叉查詢樹(每個節點的鍵值必須:比儲存在左子樹的任何鍵值都要大,比儲存在右子樹的任何鍵值都要小),這樣隨機查詢某個鍵值時可以通過從根節點執行二叉查詢來加速查詢,查詢成本取決於樹的層數。

針對範圍查詢和排序的優化:在每個葉子節點儲存其下乙個葉子節點的指標,這樣當指定範圍範圍查詢時,先從根節點根據範圍的左值找到其葉子節點,之後通過向後遍歷葉子節點即可找到對應範圍右值,這樣可以加速範圍查詢、排序、分組等資料庫查詢動作。

針對磁碟讀寫速度的優化:除了葉子節點之外的其他節點只儲存鍵值,這樣對磁碟的單次讀寫可以獲取到盡可能多的資料。以mysql為例,乙個1000萬行的表對應的b+樹按照主鍵查詢理論上只需要3次磁碟io,這相對於全表掃瞄帶來的磁碟io是多個量級的效能提公升。

mysql等資料庫引擎在實際實現b+樹索引的時候,針對磁碟讀寫做了優化:非葉子節點中只存放key值,葉子節點中除了key值也會存放資料,按照存放資料的不同索引區分為主索引(聚簇索引)和輔助索引:

a) 主索引的葉子節點中存放該key值對應的完整記錄,使用主索引進行查詢時,可以直接輸出記錄;乙個表只能建立乙個主索引。

b) 普通索引的葉子節點則存放對應主鍵的值,因此在使用輔助索引進行查詢時,需要先查找到主鍵值,然後再到主索引中進行查詢;乙個表可以建立多個輔助索引。

關係型資料庫之索引

索引,在我們的mysql中的也叫key,是儲存引擎中用於快速找到記錄的一種資料結構。這是索引的基本功能,當然,索引還有一些別的屬性。但是 高效能mysql 這本書上並沒有講清楚乙個事情,那就是索引和主鍵的區別。主鍵一定是唯一性索引,唯一性索引並不一定就是主鍵。我來來具體的東西說吧,書大家都看過吧,看...

關係型資料庫 非關係型資料庫

關係型資料庫,是指採用了關係模型來組織資料的資料庫。關係模型是在1970年由ibm的研究員e.f.codd博士首先提出的,在之後的幾十年中,關係模型的概念得到了充分的發展並逐漸成為主流資料庫結構的主流模型。簡單來說,關係模型指的就是二維 模型,而乙個關係型資料庫就是由二維表及其之間的聯絡所組成的乙個...

關係型資料庫 非關係型資料庫

2019 02 25 20 38 36 關係型資料庫和非關係型資料的比較 一 關係型資料庫 關係型資料庫最典型的資料結構是表,由二維表及其之間的聯絡所組成的乙個資料組織 優點 1 易於維護 都是使用表結構,格式一致 2 使用方便 sql語言通用,可用於複雜查詢 3 複雜操作 支援sql,可用於乙個表...