了解索引為什麼能快速查詢資料

2022-09-02 14:54:10 字數 1485 閱讀 4979

簡單概述:

在我們存資料時, 如果建立索引。 資料庫系統會維護乙個滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用資料

可以在這些資料結構之上,實現高階查詢演算法,這種結構就是索引

一般來說, 索引本身也很大, 不可能全部儲存在記憶體中, 因此索引往往以索引檔案的形式儲存在磁碟上

為了加快資料的查詢,可以維護二叉查詢樹, 每個節點分別包含索引鍵值和乙個指向對應資料記錄的實體地址的指標,

這樣就可以運用二叉查詢在一定的複雜度內獲取相應的資料,從而快速的檢索出符合條件 的記錄

除了二叉樹還有bttree索引   我平時所說的索引,如果沒有特別指定, 都是指b樹結構組織的索引

其中聚焦索引,次要索引,復合索引,字首索引,唯一預設都是b+樹索引   除b+樹索引之外, 還有雜湊索引(hash index)等

二叉查詢樹:

特點:若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;

任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;

任意節點的左、右子樹也分別為二叉查詢樹。

沒有鍵值相等的節點(no duplicate nodes)

**演示:

分析:使用這種方法可以快速的幫助我們定位到查詢的資料,如果查詢資料為52時,我們第一步從根結點37開始,發現比38大,到右邊50查詢,再發現

比50大,再到右邊查詢,3次就可以查詢到位置。但是這個並不是最好的查詢方法,如果我們查詢的資料只在一邊顯示,這個查詢速度還是很慢的

b-tree  平衡多路查詢樹:

特點:

m階b-tree滿足以下條件: 

0.根節點至少包括兩個孩子 紅色代表關鍵字

1.樹中每個節點最多有m個孩子(m>=2)

2. 除了根節點和葉子節點外,其它每個節點至少有ceil(m/2)個孩子。

3. 所有葉子節點都在同一層

4. ki(1=1…n)為關鍵字,且關鍵字按順序公升序排列k(i-1) < k 8 < 9       (紅色的是關鍵字 左邊的數要小於右邊)

5. 關鍵字的個數n滿足:ceil(m/2)-1 <= n <= m-1 (非葉子節點關鍵字個數比指向孩子的指標少1個)

6. 非葉子結點的指標p[1],p[2],…p[m] 其中p1指向關鍵字小於k[1]的子樹 3 < 8

p[m]指標關鍵字大於k[m-1]的子樹 15 > 12

p[i]指向關鍵字屬於(k[i-1],k[i])的子樹 9,10 是位於8 和 12之間

圖示:

索引為什麼降低了查詢的速度?

在碩士期間,同學去參加了國內某b2c的公司的面試,回來的時候,很鬱悶的跟我說,面試官問了他乙個資料庫的問題,在乙個查詢中,使用了某個索引所施加的列作為過濾條件 例如 select a,b from t where c x,其中c是表t的乙個字段,該字段上建立了索引 當資料庫使用該索引時,速度比不使用...

資料庫索引為什麼B樹結構

這是乙個很深的問題,我採用逐步問答的方式來解答。試圖用最簡潔的語言解決整體概念上的問題。本文目的純粹是提供對 索引採用b樹結構 這個問題的一種入門概念,不涉及深入的東西。資料庫索引為什麼會選擇b樹結構?答 因為使用b樹查詢時,所用的磁碟io操作次數比平衡二叉樹更少,效率也更高。為什麼使用b樹查詢所用...

資料庫索引為什麼使用B 樹?

b tree 二叉樹 binary tree 每個節點只能儲存乙個數。b tree b樹 b tree,並不是b 減 樹,橫槓為連線符,容易被誤導 b樹屬於多叉樹又名平衡多路查詢樹。每個節點可以多個數 由磁碟大小決定 b tree和b tree都是 b tree的變種 一般來說,索引本身也很大,不可...