專利名稱:一種數(shù)據(jù)記錄的排序方法
技術(shù)領(lǐng)域:
值本發(fā)明涉及數(shù)據(jù)庫技術(shù),具體地說,涉及數(shù)據(jù)庫中一種數(shù)據(jù)記錄的排序方法。
內(nèi)部排序指的是待排序記錄放在計算機內(nèi)存中進行的排序過程,在整個排序過程不需要訪問外存就能完成,主要使用于數(shù)據(jù)記錄數(shù)量小的排序。其排序方法有下列幾類插入類,即將無序子序列中的一個或幾個記錄插入到有序序列中,從而增加記錄的有序子序列的長度,如直接插入排序、折半插入排序、希爾排序等;交換類,即通過交換無序序列中的記錄從而得到其中關(guān)鍵字最大或最小的記錄,并將該記錄假如到有序子序列中,以此增加記錄的有序子序列的長度,如起泡排序、快排序;選擇類,即從記錄的無序子序列中選擇關(guān)鍵字最大或最小的記錄,并將該記錄加入到有序子序列中,以此增加記錄的有序子序列的長度,如堆排序;歸并類,即通過歸并兩個或兩個以上的記錄有序子序列,逐步增加記錄的有序子序列的長度。
外部排序指的是待排序記錄的數(shù)據(jù)量很大,以致內(nèi)存一次不能容納全部記錄,在排序過程中尚需對外存進行訪問的排序過程。對于外部排序,首先按可用內(nèi)存大小,利用內(nèi)部排序的方法,構(gòu)造若干記錄的有序子序列,以形成歸并段,然后通過歸并,逐步擴大有序子序列的長度,直至外存中整個記錄序列按關(guān)鍵字有序為止。
在嵌入式數(shù)據(jù)庫系統(tǒng)中,排序的數(shù)據(jù)記錄量少,因此數(shù)據(jù)記錄的排序通常采用內(nèi)部排序。而若想在嵌入式系統(tǒng)資源下實現(xiàn)大批量的數(shù)據(jù)記錄排序,目前尚無一較好的解決方案。
本發(fā)明是通過以下技術(shù)方案實現(xiàn)的一種數(shù)據(jù)記錄的排序方法,該方法包括A.將記錄按數(shù)據(jù)結(jié)構(gòu)劃分為歸并段;B.以過濾域值為條件過濾每個歸并段中的記錄,形成過濾后的歸并段,然后以指定域值為條件按堆排序的方法對過濾后的歸并段進行大小排序,形成有序子歸并段;C.如果按升序歸并,則將每個有序子歸并段中的指定域值最小記錄存入預(yù)先設(shè)置的全局緩沖區(qū);如果按降序歸并,則將每個有序子歸并段中的指定域值最大記錄存入預(yù)先設(shè)置的全局緩沖區(qū);并設(shè)置該全局緩沖區(qū)的大小與有序子歸并段的數(shù)目相同;D.以指定域值為條件對全局緩沖區(qū)中的記錄按堆排序的方法進行大小排序;E.如果按升序歸并則取出全局緩沖區(qū)中的最小記錄作為提取返回記錄;如果按降序歸并,則取出全局緩沖區(qū)中的最大記錄作為提取返回記錄;并記下該返回記錄所屬的有序子歸并段;F.在返回記錄所屬的有序子歸并段中提取該返回記錄的下一條記錄作為新記錄,然后,以指定域值為條件通過二分查找按大小順序插入全局緩沖區(qū)中;若返回記錄所屬的有序子歸并段中已無記錄可取,則減少全局緩沖區(qū)中一個記錄的存儲空間;G.循環(huán)執(zhí)行步驟E、F,直至全局緩沖區(qū)中所有記錄都提取返回為止。
進一步地,設(shè)置歸并段中的記錄格式至少包括過濾域值、排序域值、記錄地址,其中,排序域有可以是多個過濾域中的一個,也可以是非過濾域以外的其它的域;設(shè)置存入全局緩沖區(qū)的記錄格式至少包括排序域值、有序子歸并段記錄地址鏈表中的記錄地址、記錄所屬的有序子歸并段號;所述的指定域值為排序域值,所述的大小排序為指定域值的大小排序。
較佳地,步驟A所述的數(shù)據(jù)結(jié)構(gòu)為以桶構(gòu)成的哈希表結(jié)構(gòu),哈希值相同的記錄鏈接到同一桶下;所述的步驟A進一步包括將哈希表中每個桶中的所有記錄劃分為一個歸并段;所述記錄的哈希值是這樣獲得的把每個字符串對應(yīng)的整數(shù)分別乘以不同的基數(shù),再累加,并將累加的總和除以桶的個數(shù),然后取余數(shù);其中,基數(shù)為0~(N-1)之間的整數(shù),N為字符串的長度。
較佳地,所述的步驟B進一步包括設(shè)置由橫向鏈表和縱向鏈表構(gòu)成的十字鏈表,并將記錄地址記錄于鏈表中,其中,橫向鏈表為有序子歸并段中記錄的記錄地址鏈表,該鏈表按有序子歸并段中記錄的順序依次鏈接;縱向鏈表為橫向鏈表的表頭鏈表,鏈接所有有序子歸并段的記錄地址鏈表的表頭;所述的步驟C進一步包括在十字鏈表的每個橫向鏈表中提取指定域值最小記錄或最大記錄對應(yīng)的記錄地址,得到與該記錄地址對應(yīng)的記錄;步驟E所述的記下返回記錄所屬的有序子歸并段的步驟為記下返回記錄所屬的橫向鏈表;所述的步驟F進一步包括在返回記錄所屬的橫向鏈表中提取該返回記錄鏈接的下一記錄的記錄地址,獲得新記錄,若橫向鏈表中已無地址記錄可取,則將該橫向鏈表的上一橫向鏈表的表頭與下一橫向鏈表的表頭鏈接,然后刪除該橫向鏈表。
本發(fā)明針對數(shù)據(jù)庫中數(shù)據(jù)的物理存儲方式,提供了一種新型式的大記錄量數(shù)據(jù)排序的方法,大大提高了數(shù)據(jù)庫排序過濾方面的速度,優(yōu)化數(shù)據(jù)庫處理大型數(shù)據(jù)量的性能。首先,對記錄在以哈希表為索引的散列存儲結(jié)構(gòu)中的數(shù)據(jù),在構(gòu)造歸并段時,選擇一個哈希索引下的所有記錄為基本單位,并且每次只將一條記錄返回,在用戶對該記錄操作時進行下一次歸并,從用戶的角度來看,避免了一次返回所有有序記錄的等待時間,保證了排序的高效性。其次,本發(fā)明提供的排序方法并不是將整條記錄拿出來排序,而是將記錄中需要排序的字段提取出來進行排序,從而節(jié)約了內(nèi)存;對數(shù)據(jù)進行堆排序形成的有序子歸并段,排序后并不是將結(jié)果集存放在內(nèi)存中,而是將其物理地址存放起來,這不但節(jié)約了物理內(nèi)存,同時又加快了最后提取記錄時的速度。
哈希索引是數(shù)據(jù)庫索引技術(shù)的主要手段,哈希索引是這樣建立的A.把每個記錄字符串中的各個字符分別乘以不同的基數(shù),再累加,并將累加的總和除以所要建立的哈希表中元素的個數(shù),然后取余數(shù),從而得到哈希值。即按公式(1)計算得到哈希值。式中,N為該字符串的長度,i為基數(shù),其值為0~(N-1),B為所要建立的哈希表的元素個數(shù)即哈希表的大小,哈希表中的元素稱為桶(bucket)。按上述方法所計算的哈希值為一個介于0到B-1的整數(shù)。 B.將上述方法計算的哈希值作為索引,在哈希表(Hash Table)中找到記錄實際應(yīng)該存儲的位置,以建立哈希值與物理數(shù)據(jù)之間的對應(yīng)關(guān)系。例如,如果記錄的哈希值為K,那么通過將該記錄映射到哈希表第K個桶中來存儲。為了解決沖突問題,實際上哈希表中存儲的只是B個鏈表的表頭,哈希值相同的記錄都被鏈接到同一表頭下。也就是說,哈希值相同的記錄以鏈接的方式存儲于同一桶下。
按步驟A的方法計算哈希值的優(yōu)點在于,在哈希表不是很大的情況下,其哈希值可以在一定程度上均勻的分布在哈希表中,縮短了對查詢結(jié)果在桶鏈表內(nèi)的二次查找時間,同時,這一計算為線性計算,節(jié)約了計算時間,減少了數(shù)據(jù)計算開支,提高了嵌入式特性系統(tǒng)平臺的資源利用率,而且,此函數(shù)可以兼容二進制格式的數(shù)據(jù),滿足了數(shù)據(jù)庫的平臺無關(guān)特性。
參見
圖1所示,圖1為哈希表結(jié)構(gòu)的示意圖,圖中縱向為哈希表中的元素,橫向為以桶鏈表方式鏈接的相同的哈希值。
本發(fā)明的基本思想是根據(jù)哈希表結(jié)構(gòu),首先將哈希表中屬于同一個桶中的記錄作為一個歸并段,不同的桶形成不同的歸并段,對各個歸并段中的數(shù)據(jù)分別按過濾域值排序后再按該域值進行過濾,從而保證了在每個歸并段中過濾出的記錄都是有序的,然后再對過濾出的記錄進行歸并排序。
下面以一具體實施例說明。具體實現(xiàn)上可分為以下幾個步驟1.將哈希表中每個桶中的所有記錄作為一個歸并段。由于哈希表的桶為B個,因此最多有B個歸并段,歸并段中每條記錄格式包括過濾域值,用于表示需要進行過濾的域值;排序域值,用于表示過濾出的記錄按某域值進行排序的域值;記錄地址,用于表示記錄在物理磁盤上的位置。其中,如果排序域值是按某一過濾的域值進行排序,則該排序域值不會重復(fù)出現(xiàn)在記錄格式中,這是因為按該域值過濾的過程中就已經(jīng)同時按該域值進行了排序。
參見圖2所示,圖中表示了b
、b[2]、b[4]、b[5]四個歸并段,每個歸并段分別對應(yīng)了哈希表中桶b
、b[2]、b[4]、b[5]中的記錄,歸并段中的每條記錄包括了過濾域值,如filter_field1、filter_field2…分別表示需要按field1、field2…域值進行過濾;排序域值,如sort_field表示過濾出的記錄將按field域值進行排序;記錄地址,如record_address表示記錄在物理磁盤上的位置。其中,較佳地,如果sort_field中的field域值是field1、field2域值中的一個,該域值應(yīng)不會重復(fù)出現(xiàn)在記錄格式中,即field≠field1,或者field≠field2。
2.對每個歸并段中的記錄以過濾域值為條件進行過濾。例如,參見圖3所示,該歸并段中的每條記錄格式包括filter_field1、filter_field2、filter_field3、sort_field、record_address,根據(jù)filter_field1按域值field1的條件進行過濾,原來有30條記錄的歸并段過濾后形成有20條記錄的歸并段;根據(jù)filter_field2按域值field2的條件進行過濾,20條記錄的歸并段過濾后形成有15條記錄的歸并段;根據(jù)filter_field3按域值field3的條件進行過濾,15條記錄的歸并段過濾后形成有9條記錄的歸并段。
接著,以sort_field中的field域值為條件對每個歸并段按堆排序的方法進行從小到大順序排序,形成有序子歸并段。為了節(jié)約內(nèi)存,可以建立鏈表用以存放有序子歸并段中記錄的記錄地址,而不必把結(jié)果集存放在內(nèi)存中。因次,將有序子歸并段中記錄的record_address記錄于鏈表的數(shù)據(jù)地址(data_address)中,并按有序子歸并段中記錄的順序依次鏈接該鏈表,形成有序子歸并段記錄地址鏈表,然后將所有有序子歸并段記錄地址鏈表的表頭按對應(yīng)的桶順序鏈接起來,形成十字鏈表。
例如,參見圖4所示,圖中橫向鏈表為排序后同一歸并段的記錄的地址鏈表,即有序子歸并段記錄地址鏈表,b
~b
[3]為歸并段b
中記錄的記錄地址,即桶b
中的記錄在物理磁盤上的位置,鏈表按記錄排序的從小到大鏈接,則橫向上從左至右即第一項至最后一項依次對應(yīng)field域值由小至大的記錄,即b
為b
歸并段中field域值最小的記錄,b
[3]為b
歸并段中field域值最大的記錄,其它有序子歸并段的橫向鏈表與此類似。
圖4中,縱向鏈表為哈希表中桶的鏈表,即所有有序子歸并段的鏈表表頭通過按哈希表中的桶順序鏈接起來,例如,桶b
對應(yīng)的有序子歸并段記錄地址表頭b
鏈接了桶b[1]對應(yīng)的有序子歸并段記錄地址表頭b[1]
,桶b[1]對應(yīng)的有序子歸并段記錄地址表頭b[1]
鏈接了桶b[2]對應(yīng)的有序子歸并段記錄地址表頭b[2]
……,這里,該縱向鏈表對應(yīng)的記錄是無序的。上述縱向鏈表和橫向鏈表構(gòu)成了十字鏈表,該十字鏈表是動態(tài)的,當所有歸并段的記錄按指定域值進行過濾、排序處理后,該十字鏈表便形成完畢;當十字鏈表中的記錄均進行了歸并排序后,該鏈表也將刪除。
3.設(shè)置一個全局緩沖區(qū)(global_buffer),其大小與十字鏈表中縱向數(shù)組個數(shù)相同,若對記錄進行升序歸并排序,則提取十字鏈表每個桶中對應(yīng)的最小記錄存入global_buffer,若對記錄進行降序歸并排序,則提取十字鏈表每個桶中對應(yīng)的最大記錄存入global_bufier。例如,在有序子歸并段記錄地址鏈表按記錄排序的升序鏈接的情形下,則將十字鏈表中每個桶的第一項對應(yīng)的記錄存入global_buffer,以準備對過濾出的記錄進行升序歸并排序;或者將十字鏈表中每個桶的最后一項對應(yīng)的記錄存入global_buffer,以準備對過濾出的記錄進行降序歸并排序。global_buffer中的數(shù)據(jù)格式包括排序域值,表示排序的域值;記錄地址,表示記錄在物理磁盤上的位置;桶號,表示記錄所在的桶。
參見圖5所示。圖5中,global_buffer中的數(shù)據(jù)格式為sort_field表示排序的域值,record_address表示記錄在物理磁盤上的位置,bucket_number表示該記錄所在的桶號,用于指示下次歸并時記錄的來源。參見表1、表2所示,表1表示按升序歸并排序時,global_bufier中的記錄。例如,若圖4有序子歸并段記錄地址鏈表按記錄排序的升序鏈接,則圖4中每個桶的第一項對應(yīng)的記錄即為最小記錄,分別為b
、b[1]
、b[2]
、b[3]
......,因此表1中記錄地址應(yīng)有b
、b[1]
、b[2]
、b[3]
......。表2表示為按降序歸并排序時,global_buffer中的記錄,例如,圖4中每個桶的最后一項對應(yīng)的記錄即為最大記錄,分別為b
[3]、b[1][2]、b[2]
、b[3][1]......,因此表2中記錄地址應(yīng)有b
[3]、b[1][2]、b[2]
、b[3][1]......。
表1按升序歸并排序 表2按降序歸并排序4.對global_bufier中的記錄按sort_field以從小到大順序按堆排序的方法進行排序。例如,以從小到大的順序排序,這樣,最小的記錄為global_buffer的第一條,最大的記錄為global_bufier最后一條記錄。
5.從global_buffer中取出第一條記錄返回給用戶,則形成升序歸并排序;從global_buffer中取出最后一條記錄返回給用戶,則形成降序歸并排序,并記下該記錄所屬的bucket number。
6.升序歸并排序時,在十字鏈表中提取返回給用戶的第一條記錄所屬桶的下一條記錄地址,得到新記錄;降序歸并排序時,在十字鏈表中提取返回給用戶的最后一條記錄所屬桶的上一條記錄地址,得到新記錄。在global_buffer中找到第一個sort_field比該新記錄sort_field大的記錄(firstbigger),將新記錄插入其前;如果bucket number中已沒有記錄地址可取,則global buffer總記錄條數(shù)減1。循環(huán)執(zhí)行步驟5,步驟6,直至所有記錄都返回給用戶為止。
下面對步驟6插入新記錄的過程詳細說明。
在某一桶中仍有步驟6所述的新記錄可提取時a.按升序歸并排序的情況下,若新記錄的sort_field與global_buffer中所有記錄的sort_field相比是最大的,則將global_buffer中的記錄依次前移一個記錄的存儲空間,以釋放該表中的尾部的存儲空間,然后將新記錄插在global_buffer尾部,如圖6(a)所示,插入前,由于提取了global_buffer中的第一條記錄返回給用戶,使得該記錄所存儲的空間得以釋放,如圖中空白處表示釋放的存儲空間,左斜線部分為有記錄的存儲空間;通過依次前移左斜線部分的記錄,使得釋放空間移至尾部,再在尾部插入新記錄,即圖中方格部分為插入的新記錄;否則在global_buffer找到第一個sort_field比其sort_field大的記錄,將first bigger記錄之前的記錄依次前移,以將first bigger記錄之前的存儲空間釋放,再于該處插入新記錄,即新記錄插在第一個sort_field比其sort_field大的記錄前面,如圖6(b)所示。
b.按降序歸并排序的情況下,若新記錄的sort_field與global_buffer中所有記錄的sort_field相比是最大的,由于步驟5提取global_buffer中最后一條記錄返回給用戶,釋放了最尾部的存儲空間,則將新記錄直接插在global_bufier尾部,如圖7(a)所示,方格部分為插入的新記錄;否則,在global_buffer找到第一個sort_field_val比其sort_field大的記錄,將firstbigger記錄以及其之后的記錄依次后移一個記錄的存儲空間,以將firstbigger記錄之前的存儲空間釋放,再于該處插入新記錄,即新記錄插在第一個sort_field比其sort_field大的記錄前面,如圖7(b)所示,方格部分為插入的新記錄。
在某一桶中沒有步驟6所述的新記錄可提取時,說明已完成了某一桶中的所有記錄的歸并排序,global_buffer總記錄條數(shù)減1,也就應(yīng)減少一個記錄存儲空間,因此在升序歸并的情況下,將global_buffer的頭地址指針移至下一個記錄的存儲空間,例如,如圖8(a)所示,圖中,存儲空間80中的記錄返回給用戶后,當該記錄所屬桶中無記錄可取,則將存儲空間81中的記錄返回給用戶,同時將頭地址指針移至存儲空間81處,使指針指向global_buffer中的第一條記錄;在降序歸并的情況下,將global_buffer中所有的記錄依次后移一個記錄的存儲空間,再將global_buffer的頭地址指針移至下一個記錄的存儲空間,例如,如圖8(b)所示,由于降序歸并時,返回給用戶的記錄是global_buffer中最后一條記錄,即將存儲空間85中的記錄返回給用戶,當該記錄所屬桶中無記錄可取,則將global_buffer中所有的記錄依次后移一個記錄的存儲空間,同時,將global_buffer的頭地址指針移至下一個記錄的存儲空間,再將存儲空間85中的記錄返回給用戶,實質(zhì)上是將存儲空間84返回給用戶。
由上述步驟和說明可見,存儲記錄地址的十字鏈表形成后,從歸并段中取第一條/最后一條記錄填入global_buffer,對global_buffer再按從小到大排序后,對于升序歸并排序來說,global_buffer取出的第一條記錄一定是所有待排序記錄中最小的;反之,對于降序歸并排序,global_buffer取出的最后一條記錄一定是所有待排序記錄中最大的?;谶@個思想,上述十字鏈表的形成順序、global_buffer中記錄的排序順序、選取十字鏈表中的第一項還是最后一項存入global_buffer、返回記錄是global_buffer中的第一條還是最后一條等都不重要,具體實施時可適當組合匹配,只要能達到同樣的效果和目的即可。
本發(fā)明解決了系統(tǒng)內(nèi)存資源有限的情況下,大批量數(shù)據(jù)排序的問題,尤其在嵌入式系統(tǒng)中,以堆排序和外歸并排序為指導(dǎo)思想,在有限的內(nèi)存中對大量數(shù)據(jù)進行過濾并排序的算法,提高了數(shù)據(jù)庫排序過濾的速度,有效的解決了嵌入式系統(tǒng)對批量數(shù)據(jù)的限制,使用戶能夠快捷、方便地得到預(yù)期希望的結(jié)果。
本發(fā)明并不局限于上述實施例的具體介紹。本發(fā)明可進一步更新,或者對本發(fā)明所公開的特征加以新的組合(包括任何相關(guān)的權(quán)利要求、摘要和附圖),也可對本發(fā)明所公開的任何方法或者過程進行更新或者進行新組合。
權(quán)利要求
1.一種數(shù)據(jù)記錄的排序方法,其特征在于,該方法包括A.將記錄按數(shù)據(jù)結(jié)構(gòu)劃分為歸并段;B.以過濾域值為條件過濾每個歸并段中的記錄,形成過濾后的歸并段,然后以指定域值為條件按堆排序的方法對過濾后的歸并段進行大小排序,形成有序子歸并段;C.如果按升序歸并,則將每個有序子歸并段中的指定域值最小記錄存入預(yù)先設(shè)置的全局緩沖區(qū);如果按降序歸并,則將每個有序子歸并段中的指定域值最大記錄存入預(yù)先設(shè)置的全局緩沖區(qū);并設(shè)置該全局緩沖區(qū)的大小與有序子歸并段的數(shù)目相同;D.以指定域值為條件對全局緩沖區(qū)中的記錄按堆排序的方法進行大小排序;E.如果按升序歸并則取出全局緩沖區(qū)中的最小記錄作為提取返回記錄;如果按降序歸并,則取出全局緩沖區(qū)中的最大記錄作為提取返回記錄;并記下該返回記錄所屬的有序子歸并段;F.在返回記錄所屬的有序子歸并段中提取該返回記錄的下一條記錄作為新記錄,然后,以指定域值為條件通過二分查找按大小順序插入全局緩沖區(qū)中;若返回記錄所屬的有序子歸并段中已無記錄可取,則減少全局緩沖區(qū)中一個記錄的存儲空間;G.循環(huán)執(zhí)行步驟E、F,直至全局緩沖區(qū)中所有記錄都提取返回為止。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,設(shè)置歸并段中的記錄格式至少包括過濾域值、排序域值、記錄地址,其中,排序域為過濾域中的一個,或者是非過濾域值。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,設(shè)置存入全局緩沖區(qū)的記錄格式至少包括排序域值、有序子歸并段記錄地址鏈表中的記錄地址、記錄所屬的有序子歸并段號。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述的指定域值為排序域值,所述的大小排序為指定域值的大小排序。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,步驟A所述的數(shù)據(jù)結(jié)構(gòu)為以桶構(gòu)成的哈希表結(jié)構(gòu),哈希值相同的記錄鏈接到同一桶下。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述的步驟A進一步包括將哈希表中每個桶中的所有記錄劃分為一個歸并段。
7.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述記錄的哈希值是這樣獲得的把每個字符串對應(yīng)的整數(shù)分別乘以不同的基數(shù),再累加,并將累加的總和除以桶的個數(shù),然后取余數(shù);其中,基數(shù)為0~(N-1)之間的整數(shù),N為字符串的長度。
8.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述的步驟B進一步包括設(shè)置由橫向鏈表和縱向鏈表構(gòu)成的十字鏈表,并將記錄地址記錄于鏈表中,其中,橫向鏈表為有序子歸并段中記錄的記錄地址鏈表,該鏈表按有序子歸并段中記錄的順序依次鏈接;縱向鏈表為橫向鏈表的表頭鏈表,鏈接所有有序子歸并段的記錄地址鏈表的表頭;所述的步驟C進一步包括在十字鏈表的每個橫向鏈表中提取指定域值最小記錄或最大記錄對應(yīng)的記錄地址,得到與該記錄地址對應(yīng)的記錄;步驟E所述的記下返回記錄所屬的有序子歸并段的步驟為記下返回記錄所屬的橫向鏈表;所述的步驟F進一步包括在返回記錄所屬的橫向鏈表中提取該返回記錄鏈接的下一記錄的記錄地址,獲得新記錄,若橫向鏈表中已無地址記錄可取,則將該橫向鏈表的上一橫向鏈表的表頭與下一橫向鏈表的表頭鏈接,然后刪除該橫向鏈表。
全文摘要
一種數(shù)據(jù)記錄的排序方法,將記錄按數(shù)據(jù)結(jié)構(gòu)劃分為歸并段;以過濾域值為條件過濾每個歸并段中的記錄,對過濾后的歸并段進行排序,形成有序子歸并段;將每個有序子歸并段中最小或最大記錄存入預(yù)先設(shè)置的全局緩沖區(qū);對全局緩沖區(qū)中的記錄進行排序;取出全局緩沖區(qū)中的最小記錄或最大記錄作為提取返回記錄;并記下該返回記錄所屬的有序子歸并段;在返回記錄所屬的有序子歸并段中提取該返回記錄的下一條記錄作為新記錄,然后,插入全局緩沖區(qū)中;若返回記錄所屬的有序子歸并段中已無記錄可取,則減少全局緩沖區(qū)中一個記錄的存儲空間;循環(huán)執(zhí)行所有記錄都提取返回為止。本發(fā)明提高了數(shù)據(jù)庫排序過濾方面的速度,優(yōu)化數(shù)據(jù)庫處理大型數(shù)據(jù)量的性能。
文檔編號G06F12/00GK1464451SQ0212156
公開日2003年12月31日 申請日期2002年6月26日 優(yōu)先權(quán)日2002年6月26日
發(fā)明者孫雅莎, 丁剛, 楊柏梁 申請人:聯(lián)想(北京)有限公司