資料庫系統中,資料排序有著重要的作用。其原因有兩個:
對於乙個資料庫來說,它往往具有海量的資料。若對這海量資料進行排序,是不能夠一次性在記憶體中完成的,因此把不能全部放在記憶體中的關係的排序稱為外排序,而外排序最常用的技術就是外部排序歸併演算法。
舉個最簡單的例子來說明外部排序歸併演算法。下面對序列 2, 3, 1, 7, 9, 6, 8, 4, 5, 0 進行排序。首先使用最傳統的二路歸併排序演算法:
如上圖所示,第一次歸併排序是兩兩元素合併並排序,第二次歸併是將上一次排序好的元素進行重排,依此類推得到最終排序結果。
上述演算法的前提是記憶體能夠容納所有排序元素,說白了就是要排序10個元素得至少有長度為10的陣列來存它才行。如果陣列長度不足10,一次只能排序3個元素怎麼辦?這就用到了外部排序的思想。
第一階段,和之前一樣,因為只能對3個元素進行排序,那就首先以3個元素為1組將其排好,這排好的三元組就稱為歸併段。
第二階段,記憶體只能儲存3個資料,這裡為2個歸併段各分配乙個塊用來進行比較,剩下的一塊儲存兩元素比較的較小值作為輸出結果。即從第乙個歸併段中取出1,從第二個歸併段中取出6。將比較結果存入第三個塊中,此時存入1,並將1存入到結果中。
由於1已經存入到結果中,接著應該從歸併段1中將下乙個元素快取至記憶體,並將比較結果存入第三塊之後輸出,如下圖所示。
依此類推,當乙個歸併段的元素全部用完後,載入下乙個歸併段重複上述過程,最終得到排序結果。
得到了排序結果,就能夠將這一結果運用到連線當中。
這一連線演算法可用於計算自然連線和等值連線。該演算法描述如下:
歸併連線演算法為每個關係(r和s)分配各乙個指標(pr和ps);
首先順序遍歷關係r,將具有相同值元素暫存在緩衝區中;
順序遍歷關係s,遍歷到元素的值大於等於緩衝區中的值,如果相等,則執行步驟4,否則返回步驟1。
順序遍歷緩衝區和關係s中的元素,並將相同元素加入連線結果中;當元素值不同時,返回步驟2,若任意指標為空,則結束連線。
下面用乙個簡單的例子來說明該演算法。假設關係r為一陣列2,3,3,5,5,6
,關係s為1,1,2,2,3,4,4,5
。注意,這裡的陣列都是已經排好序的,其排序演算法正是本文第一節中提到的。
為兩個關係各分配乙個指標,此時pr
指向r中的2,ps
指向s中的1,如下圖所示。
順序遍歷關係r,相同元素只有2,因此將2加入緩衝區,當前緩衝區內元素為,如下圖所示:
順序遍歷關係s中的元素,由於緩衝區中元素為2,因此ps
遍歷到2時轉到步驟4,如下圖:
緩衝區中元素為,ps指向2,因此將
加入連線結果,ps指標隨即指向下乙個元素。ps指標仍然指向2,則需再次把
加入到連線結果中,同時更新ps指標。此時ps指向的內容為3,本輪連線結束,返回步驟2。完成該步驟後指標如下圖所示:
這時,連線結果中存有兩個元組。
同樣的道理,再次執行步驟2,將元素3加入緩衝區,緩衝區中元素為,執行步驟3;當前ps指向為3,執行步驟4;將
(3,3)
和(3,3)
加入到連線結果,ps和pr均不是空指標,則再次執行步驟2。依此類推得到最終結果。
資料庫系統概念 回顧
資料抽象一般分三層 最底層 物理層physical level 描述資料實際上是怎樣儲存的 中間層 邏輯層logic level 描述資料庫中儲存什麼資料及這些資料間存在什麼關係 最頂層 檢視層view level 只描述整個資料庫的某個部分 關係模型 relational model logic ...
SQLServer資料庫系統概念
資料模型是一種抽象模型,現實世界中的客觀事物是彼此相互聯絡的 1 資料模型是一組整合的概念,使用者描述和操作組織內的資料,資料間的聯絡以及對資料的約束,它包含了資料結構,資料操作和完整性約束 2 概念模型又被稱為實體 聯絡 e r 模型,主要用於描述資訊世界中實體的聯絡 在概念模型中用於描述其資料的...
資料庫系統mysql MySQL資料庫系統
1 mysql的特點 1 多執行緒 多使用者 2 基於c s 客戶端 伺服器 架構 3 簡單易用 查詢速度快 4 安全可靠 2 mysql編譯安裝 代表鍵盤上tab鍵 1 準備工作 解除安裝使用rpm方式安裝的mysql rpm e mysql nodeps 安裝cmake包 cd media ta...