mysql深入理解資料庫索引結構

2021-10-09 19:01:53 字數 1415 閱讀 5911

1)資料庫檔案儲存的方式:

資料庫檔案儲存都是以磁碟檔案儲存在系統中的,這也是資料庫能持久化儲存資料的原因。

2)從資料庫讀取資料的原理:

從資料庫讀取資料,先暫且不考慮從快取中讀取資料的情況,那就是從磁碟檔案中讀取資料的,我們知道從磁碟檔案中讀取資料是比較耗時的,資料庫的select操作的時間,取決於執行磁碟io的次數,因此儘量減少磁碟io就可以顯著的提公升資料的查詢速度。

3)減少磁碟io操作的影響因素:

磁碟io與預讀:

磁碟讀取依靠的是機械運動,分為尋道時間、旋轉延遲、傳輸時間三個部分,這三個部分耗時相加就是一次磁碟io的時間,大概9ms左右。這個成本是訪問記憶體的十萬倍左右;正是由於磁碟io是非常昂貴的操作,所以計算機作業系統對此做了優化:預讀;每一次io時,不僅僅把當前磁碟位址的資料載入到記憶體,同時也把相鄰資料也載入到記憶體緩衝區中。*因為區域性預讀原理說明:當訪問乙個位址資料的時候,與其相鄰的資料很快也會被訪問到。*每次磁碟io讀取的資料我們稱之為一頁(page)。一頁的大小與作業系統有關,一般為4k或者8k。這也就意味著讀取一頁內資料的時候,實際上發生了一次磁碟io。

正因為有了磁碟io預讀機制,所以才有了減少磁碟io的可能,因為一次磁碟io操作,可以查詢到物理儲存中相鄰的一大片資料。

以索引為b+樹為例:

磁碟io次數和索引資料結構查詢的次數以及磁碟io與預讀都有關係,具體關係:磁碟io次數 <= b+樹中從根節點一直到葉子節點整個過程中查詢的節點數。

一次磁碟io操作可以取出物理儲存中相鄰的一大片資料,如果查詢的索引資料(就是b+樹中從根節點一直到葉子節點整個過程中查詢的節點數)都集中在該區域,那麼只需要一次磁碟io,否則就需要多次磁碟io。

4)基於磁碟io預讀機制,索引可以快速查詢資料

索引是幫助資料高效查詢資料的一種資料結構,它包含乙個表中某些列的值以及記錄對應的位址,並且把這些值儲存在乙個資料結構中。常用的索引有b樹和b+樹。

在資料庫中,聚集索引在b+樹的葉子節點儲存的是整個記錄資料,非聚集索引儲存的是指向記錄資料的指標。

5)資料庫為什麼使用b+樹作為索引結構

1. 鍊錶:每次查詢都要從頭開始查,複雜度為o(n)。

2. 陣列:雖然查詢速度為o(1),但是插入,刪除就比較麻煩了。還有索引存在磁碟中,當索引非常大的時候,無法一次載入到記憶體中。

3. 平衡二叉樹:雖然查詢時間最快,o(logn),但是b樹和b+樹更加「矮胖」,即磁碟io次數更少。

4. b+樹比b樹更加「矮胖」,更適合做索引結構。

深入理解資料庫鎖

oracle中分為兩種模式的鎖,一種是排他鎖 x鎖 另一種是共享所 s鎖 鎖是實現併發的主要手段,在資料庫中應用頻繁,但很多都由資料庫自動管理,當事務提交後會自動釋放鎖.oracle為了使資料庫實現高度併發訪問,它使用了不同型別的鎖來管理併發會話對資料物件的操作.oracle的鎖按作用物件不同分為如...

mysql 索引深入理解 深入理解MySql的索引

為什麼索引能提高查詢速度 先從 mysql的基本儲存結構說起 mysql的基本儲存結構是頁 記錄都存在頁裡邊 各個資料頁可以組成乙個雙向鍊錶每個資料頁中的記錄又可以組成乙個單向鍊錶 每個資料頁都會為儲存在它裡邊兒的記錄生成乙個頁目錄,在通過主鍵查詢某條記錄的時候可以在頁目錄中使用二分法快速定位到對應...

深入理解資料庫併發控制原理

併發控制原理 事務之間的相互影響可能導致資料庫狀態的不一致,即使各個事務能保持狀態的正確性,而且也沒有任何故障發生。因此,不同事務中各個步驟的執行順序必須以某種方式進行規範。控制這些步驟的功能由dbms的排程器部件完成,而保證併發執行的事務能保持一致性的整個過程稱為併發控制。排程器的作用如圖1所示。...