數據庫系統之物理設計

數據庫中數據的存放方式
一個數據庫被映射到多個不同的文件,而這些文件由底層的操作系統來維護,這些文件會永久地存放在磁盤上,一個文件在邏輯上組織成記錄的一個序列,這些記錄映射到磁盤上。
每個文件被分成定長地存儲單元-塊(block),是數據存儲和傳輸的基本單位(默認一般是4-8kB),一個塊可以包括很多記錄,且一個記錄的數據不能跨塊存儲。

定長記錄和變長記錄的區別

定長記錄是指文件中所有記錄的長度都是相同的,所有記錄中的各數據項都處在記錄中相同的位置,具有相同的順序和長度。定長記錄具有處理方便、開銷小等優點。變長記錄是指文件中各記錄的長度不相同。產生變長記錄的原因,可能是由於一個記錄中所包含的數據項數目並不相同,也可能是數據項本身的長度不定。一般來說,定長的效率會好一些,因爲變長的需要處理一下,但是定長記錄會產生小磁盤碎片,造成一部分空間的浪費。

文件中記錄的組織形式
堆文件:記錄在文件空間中任意位置(在按給定屬性搜索記錄時,需依次讀出所有記錄,並依次選出滿足條件的所有記錄,查找效率低)
順序文件組織:按一定的順序在文件中組織記錄(按搜索碼搜索效率高,但刪除和插入記錄時的開銷大)
散列文件:按照散列函數計算值存放相應記錄
多表簇集文件組織:不同關係表裏的記錄存放在同一文件中(表間連接塊單在一個關係上的記錄查找滿)

數據字典

數據字典是關於關係的關係模式和其他元數據存儲的地方,又稱系統目錄。
必須存儲的數據類型:關係的名字,每個關係中屬性的名字,屬性的域和長度,在數據庫上定義的視圖的名字和這些視圖的定義,完整性約束,索引信息(索引名字,被索引的關係的名字,在以上定義索引的屬性)

數據庫緩衝區及緩衝區的作用

緩衝區是內存中用於存放磁盤塊的拷貝的那部分
負責緩衝區空間分配的子系統稱爲緩衝區管理器
1.CPU處理信息快捷,但從磁盤讀取記錄緩慢
2.緩衝區一次I/O讀多個硬盤上多個記錄(按塊);可明顯減少磁盤I/O開銷
3.緩衝區中的記錄,可能爲多個應用所需要,可明顯減少磁盤I/O開銷

緩衝區的作用就是減少磁盤I/O開銷,提高數據庫的數據訪問的效率。
緩衝區替換策略
1.最近最少使用策略(LRU),是一種常用的頁面置換算法,選擇最近最久未使用的頁面予以淘汰。
2.立即丟棄策略:一旦塊中最後一個元組處理完畢,立即命令緩衝區管理器釋放這個塊所佔用的空間。
3.最近最常使用策略(MRU):替換時選擇最近最長使用的塊

索引

索引的概念

索引是一種與(數據庫)文件相關聯的附加結構,額外增加的一個輔助文件。索引能夠幫助我們快速的檢索我們需要的數據。
搜索碼:用於在文件中查找記錄的屬性/屬性組
索引項:由一個搜索碼值和指向具有該搜索碼值的一條/多條記錄的指針構成
索引文件是包括搜索碼和指向具有該搜索碼值的一條或多條記錄的指針構成
索引項/索引記錄是構成索引結構/索引文件中的基本要素

索引的特點

1.在合適的字段建立索引,能夠提高查詢效率
2.並不是建立了索引,就一定能提高查詢效率的
3.索引主要使用在記錄文件的記錄數量龐大的情況下,效果更好。

索引的分類

根據存儲的方式不同,索引分爲了兩種:順序索引(按順序存儲搜索碼的值)和散列索引

順序索引

順序索引的分類

主索引和輔助索引(主索引一般建立在主碼上面,輔助索引依據實際需要建立,一般選取經常需要查詢的屬性)
主索引(聚集索引):索引文件排序與數據文件排序相同(只能有一個),包括稠密索引和稀疏索引。
輔助索引(非聚集索引):索引文件排序與數據排序文件排序不相同(可多個),輔助索引一定是稠密索引。
順序索引的實現類型
輔助索引和主索引的區別
1.輔助索引的結構和主索引是不同的。輔助索引的指針並不直接指向文件,而是每個指針指向一個包含文件指針的存儲桶。存儲桶中的每個指針都指向文件中的記錄。
2.與索引不同,輔助索引可以提高使用輔助搜索碼查詢記錄的速度,但是輔助索引要大大增加數據庫更新的開銷。

1.稠密索引:索引文件中每個搜索碼都有一個索引項。稠密索引可次序不同(稠密索引爲主索引則次序相同,爲輔助索引則次序與數據記錄文件不同)。
2.稀疏索引:索引文件中只爲某些搜索碼建立索引項。稀疏索引次序必須相同,且只有主索引才能使用。

稠密索引和稀疏索引優缺點
1.稠密索引可以比稀疏索引更快的定位一條記錄
2.稀疏索引佔用的空間較小,插入和刪除時所需要維護的開銷較小
多級索引
多級索引就是在索引文件上再建立索引,將索引文件看做是數據記錄文件,在之上再建立索引。在索引文件的基礎上建立一個索引,稱爲二級索引。
不是對所有的數據記錄都建立多級索引,如果索引文件不大,就沒有必要建立多級索引。

散列索引
散列函數:令K表示所有搜索碼值的集合,令B表示所有桶地址的集合。散列函數h是一個從K到B的函數。我們用h表示散列函數。
爲了插入一條搜索碼爲Ki的記錄,我們計算h(Ki),它給出了存放該記錄的桶的地址。我們目前假定桶 中有容納這條記錄的空間,於是這條記錄就存儲到該桶中。
插入一個索引項:計算搜索碼的散列值確定桶,然後在相應桶中寫入索引項。
刪除一個索引項:計算搜索碼的散列值確定桶,然後在相應桶中刪除索引項。
查找記錄:計算搜索碼的散列值確定桶,然後在相應桶中得到索引項,根據索引項中指針得到記錄。

B+樹索引

B+樹的構建過程:
https://www.bilibili.com/video/BV1n7411A7x3?from=search&seid=10814960221958388282
B+樹的定義:
(1)B中包含兩種類型的節點,內部節點(也稱之爲索引節點)和葉子節點,根節點本身可以是內部結點,也可以是葉子節點。根節點至少有一個關鍵字key。
(2)B+樹的內部結點不用於保存數據,只用於索引,所有記錄都保存在葉子節點裏面。葉節點包含所有搜索碼,且葉節點的指針指向記錄。
(3)m階的B+樹最多存儲m-1個記錄(索引),擁有m個指針。(節點的最多分叉稱爲階)
(4)部結點中的key都按照從小到大的順序排列,對於內部結點中的一個key,左樹中的所有key都小於它,右子樹中的key都大於等於它。葉子結點中的記錄也按照key的大小排列。
(5)每個葉子結點都存有相鄰葉子結點的指針,葉子結點本身依關鍵字的大小自小而大順序鏈接。
插入示例:(五階)
1.插入5,8,10,16,15
在這裏插入圖片描述
調整:
在這裏插入圖片描述
2.插入17,18
在這裏插入圖片描述
調整:
在這裏插入圖片描述
3.插入6,9,19,20
在這裏插入圖片描述
調整:
在這裏插入圖片描述
刪除示例:
1.初始狀態:
在這裏插入圖片描述
2.刪除22
在這裏插入圖片描述
3.刪除15

4.刪除7
在這裏插入圖片描述

可擴充散列

假設我們在一個文件上使用可擴充散列,該文件所含記錄的搜索碼值如下:
2,3,5,7,11,17,19,23,29,31
如果散列函數爲h(x) =x mod 8, 且每個桶可以容納3條記錄。給出此文件的可擴充散列結構。
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章