欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

存儲和訪問數(shù)據(jù),以及提高數(shù)據(jù)庫查詢語言語句性能的方法和機制的制作方法

文檔序號:6412135閱讀:221來源:國知局

專利名稱::存儲和訪問數(shù)據(jù),以及提高數(shù)據(jù)庫查詢語言語句性能的方法和機制的制作方法
技術(shù)領(lǐng)域
:本發(fā)明涉及數(shù)據(jù)庫管理系統(tǒng)領(lǐng)域。更具體地,本發(fā)明涉及在計算機系統(tǒng)中存儲和檢索數(shù)據(jù),以及提高數(shù)據(jù)庫查詢語言語句的性能的方法和機制。
背景技術(shù)
:隨著許多現(xiàn)代商業(yè)和組織對訪問更為大量信息的需求的增加,必須存儲在數(shù)據(jù)庫和計算機系統(tǒng)中的數(shù)據(jù)量也在增加。存儲大量信息的費用的一個重要部分與購買和維護數(shù)據(jù)存儲系統(tǒng)的成本有關(guān)。給定這樣的費用,建議采用適當?shù)姆椒▉頊p少存儲給定數(shù)據(jù)量所需要的空間量。數(shù)據(jù)壓縮是在許多現(xiàn)代計算機系統(tǒng)中用來減少數(shù)據(jù)的存儲成本的一種技術(shù)。實現(xiàn)壓縮的一種普通方法是以文件的粒度(granularity)壓縮數(shù)據(jù)。例如,常規(guī)壓縮方法,如基于Unix的gzip和基于DOS的zip,將整個文件壓縮成該文件的更加緊湊版本。這種類型的方法的缺點是,如果整個文件被壓縮,那么在使用其任何一部分之前,必須解壓縮全部文件或大部分文件,即使是用戶實際上只需要很小的一部分。特別對于壓縮數(shù)據(jù)庫系統(tǒng)中的文件存在問題,其中單個數(shù)據(jù)庫文件可能包含大量的數(shù)據(jù)庫記錄,但是在任何時候可能只需要各個記錄的一小部分。于是壓縮或解壓縮的粒度可能實際上并不與在系統(tǒng)中期望使用和訪問數(shù)據(jù)的粒度匹配。然而,以其它粒度壓縮可能導致存儲效率低下。例如,某些一次一頁的壓縮方法可能會導致壓縮頁面大小不同,其映射到物理頁面的效率低下。另外,許多常規(guī)壓縮技術(shù)甚至不能保證壓縮后數(shù)據(jù)大小不會增加。而且,壓縮和解壓縮數(shù)據(jù)這樣的操作可能會消耗大量的系統(tǒng)開銷。系統(tǒng)開銷典型地與所使用的具體壓縮算法以及被壓縮和解壓縮的數(shù)據(jù)量相關(guān)。當試圖在數(shù)據(jù)庫系統(tǒng)中存儲、檢索、或更新信息時,該系統(tǒng)開銷就使等待時間顯著地增加。例如某些壓縮技術(shù)將壓縮信息與被壓縮的數(shù)據(jù)分開存儲。因此,對于簡單的讀訪問,就需要訪問數(shù)據(jù)庫中的多個位置,并且可能需要進行復雜的解壓縮操作。給定等待時間問題,以及低于某一壓縮增益,在數(shù)據(jù)庫或其它類型的計算系統(tǒng)中,壓縮的時間和空間之間的權(quán)衡并不總是令人滿意。因此需要一種壓縮技術(shù),其不僅會使得減少所使用的磁盤空間,而且對查詢壓縮數(shù)據(jù)的數(shù)據(jù)庫查詢語言語句的性能沒有負面影響。
發(fā)明內(nèi)容本發(fā)明提供一種存儲和檢索壓縮格式的數(shù)據(jù)的方法和機制。在一個實施例中,通過減少或去除在數(shù)據(jù)塊或其它存儲單元中的重復數(shù)據(jù)值,對所存儲的數(shù)據(jù)進行數(shù)據(jù)壓縮。在另一個實施例中,保持有描述該數(shù)據(jù)塊內(nèi)的數(shù)據(jù)重復的信息。本發(fā)明也提供一種用于改進數(shù)據(jù)庫查詢語言語句的性能的方法和機制。在一個實施例中,維護并使用所保持的數(shù)據(jù)重復信息,以減少謂詞(predicate)評估的數(shù)目。在另一個實施例中,使用該數(shù)據(jù)重復信息以減少通過數(shù)據(jù)庫查詢語言語句訪問的數(shù)據(jù)的量。下面在說明書、附圖和權(quán)利要求中對本發(fā)明的各方面、目的和優(yōu)點進行更詳細的描述。前面的一般性說明和下面的詳細說明都是示范性的和解釋性的,并不意欲對本發(fā)明的范圍進行限定。所包括的附圖與發(fā)明詳述一起提供對本發(fā)明更進一步的理解,并且用于解釋本發(fā)明。圖1所示為根據(jù)本發(fā)明實施例的數(shù)據(jù)存儲結(jié)構(gòu)。圖2所示為存儲數(shù)據(jù)過程的實施例的流程圖。圖3所示為檢索數(shù)據(jù)過程的實施例的流程圖。圖4描述了根據(jù)本發(fā)明實施例的符號表格中的條目的遞歸引用。圖5描述了根據(jù)本發(fā)明實施例的符號表格中的條目的遞歸引用和列的重新排序。圖6所示為存儲數(shù)據(jù)過程的可選實施例的流程圖。圖7描述了根據(jù)本發(fā)明實施例的NULL尾值的刪除。圖8描述了根據(jù)本發(fā)明實施例的NULL尾值的刪除和列的重新排序。圖9所示為根據(jù)本發(fā)明的實施例,將解壓縮的數(shù)據(jù)塊轉(zhuǎn)換成壓縮數(shù)據(jù)塊的過程。圖10的流程圖為根據(jù)本發(fā)明的實施例,提高數(shù)據(jù)庫查詢語言語句性能的方法。圖11說明了根據(jù)本發(fā)明的實施例,保持數(shù)據(jù)重復信息的過程。圖12描述了根據(jù)本發(fā)明一個實施例的數(shù)據(jù)重復信息的保持。圖13所示的流程圖為根據(jù)本發(fā)明的另一個實施例,保持數(shù)據(jù)重復信息的方法。圖14描述了根據(jù)本發(fā)明的一個實施例,對數(shù)據(jù)重復信息的更新。圖15的處理流程為根據(jù)本發(fā)明的實施例,提高數(shù)據(jù)庫查詢語言語句性能的方法。圖16所說明的流程圖為提高數(shù)據(jù)庫查詢語言語句性能的另一個方法。圖17描述了根據(jù)本發(fā)明的一個實施例,數(shù)據(jù)庫查詢語言語句的性能是如何提高的范例。圖18所示的處理流程為根據(jù)本發(fā)明的另一個實施例,提高數(shù)據(jù)庫查詢語言語句性能的方法。圖19說明的是根據(jù)本發(fā)明的實施例,減少通過數(shù)據(jù)庫查詢語言語句訪問的數(shù)據(jù)量的過程。圖20為根據(jù)本發(fā)明的一個實施例,如何可以使用數(shù)據(jù)重復信息來提高數(shù)據(jù)庫查詢語言語句的性能的范例。圖21描述的流程圖為根據(jù)本發(fā)明進一步實施例的提高數(shù)據(jù)庫查詢語言語句性能的方法。圖22為根據(jù)本發(fā)明的一個實施例,如何可以使用數(shù)據(jù)重復信息來滿足數(shù)據(jù)庫查詢語言語句的范例。圖23為可以用來實施本發(fā)明實施例的計算機系統(tǒng)的框圖。圖24所示為根據(jù)本發(fā)明實施例的查找樹的范例。具體實施例方式本發(fā)明公開了從數(shù)據(jù)存儲系統(tǒng)存儲和檢索數(shù)據(jù)。不是以文件級別或某一其它粒度壓縮數(shù)據(jù),這類數(shù)據(jù)壓縮可能會導致存儲效率低下和/或增加數(shù)據(jù)庫查詢語言語句的執(zhí)行時間,而是通過減少或去除數(shù)據(jù)塊或其它存儲單元中的重復值來實現(xiàn)數(shù)據(jù)壓縮。本發(fā)明還公開了提高數(shù)據(jù)庫查詢語言語句的性能。通過保存描述數(shù)據(jù)塊內(nèi)的數(shù)據(jù)重復的信息(以前在每次訪問數(shù)據(jù)塊時都必須對其重新計算),可以使用數(shù)據(jù)重復信息來提高數(shù)據(jù)庫查詢語言語句的性能。數(shù)據(jù)庫查詢語言語句常被用于創(chuàng)建、查找、訪問、檢索、修改、組織、維護、操作、定義、控制、添加、和/或刪除數(shù)據(jù)庫中的數(shù)據(jù)和結(jié)構(gòu)。一種流行的數(shù)據(jù)庫查詢語言稱為結(jié)構(gòu)化查詢語言(SQL)。只用于解釋目的,而不是通過限制的方式,特別參考包括SQL的數(shù)據(jù)庫語句進行下面的說明。整個文章中所使用的術(shù)語“盤”和“盤系統(tǒng)”指的是數(shù)據(jù)存儲系統(tǒng)。此處所公開的發(fā)明概念也可以應(yīng)用于除了基于盤的系統(tǒng)之外的其它類型的存儲系統(tǒng)。另外將關(guān)于從數(shù)據(jù)庫中存儲或檢索關(guān)系數(shù)據(jù)做出下面的說明。然而要注意到,本發(fā)明可以用于在計算機系統(tǒng)中管理其它類型和粒度的數(shù)據(jù),于是本發(fā)明并不局限于壓縮關(guān)系數(shù)據(jù)。根據(jù)本發(fā)明的實施例,對將要存儲在特定數(shù)據(jù)存儲單元內(nèi)的一組數(shù)據(jù)內(nèi)的重復值做出標識。不是將所有的這些重復數(shù)據(jù)值寫入到該數(shù)據(jù)存儲單元,而是創(chuàng)建一個符號表來存儲每一重復的數(shù)據(jù)值的一個拷貝。重復數(shù)據(jù)值的每一次出現(xiàn)被配置成引用該符號表中的對應(yīng)的重復數(shù)據(jù)值。如此處所述,數(shù)據(jù)存儲單元被顯示為數(shù)據(jù)塊或盤頁面。然而,也可以使用其它數(shù)據(jù)存儲單元。在一個實施例中,數(shù)據(jù)塊是自含式的,例如,重新創(chuàng)建數(shù)據(jù)塊中的解壓縮數(shù)據(jù)所需要的信息在該數(shù)據(jù)塊內(nèi)可獲得。圖1所示的數(shù)據(jù)庫表格100將要被存儲到盤112上的塊114內(nèi)。表格100中的每一行包括4列信息,包括“序號”列120、“客戶”列122、“項目”列124、和“價格”列126。表格100中顯示有3行數(shù)據(jù)。行102a在“序號”列120的值為“1251”、在“客戶”列122的值為“Joe”、在“項目”列124的值為“Book”、并且在“價格”列126的值為“10”。行104a在“序號”列120的值為“1252”、在“客戶”列122的值為“Tom”、在“項目”列124的值為“Book”、并且在“價格”列126的值為“10”。行106a在“序號”列120的值為“1253”、在“客戶”列122的值為“Joe”、在“項目”列124的值為“Tape”、并且在“價格”列126的值為“20”。注意到,值“Joe”在行102a和106a的“客戶”列122重復。類似地,值“Book”在行102a和104a的“項目”列124重復。值“10”在行102a和104a的“價格”列126重復。創(chuàng)建符號表110以存儲每一重復的數(shù)據(jù)值。特別地,重復值“Joe”存儲在符號表條目(entry)130中,重復值“10”存儲在符號表條目132中,并且重復值“Book”存儲在符號表條目134中。當表格100中的每一行數(shù)據(jù)存儲到盤112上的塊114時,重復的數(shù)據(jù)值不再寫入盤中。相反,例如使用指針或鏈接結(jié)構(gòu),每一行的相應(yīng)部分被配置成引用包含正確數(shù)據(jù)值的符號表110中的適當符號表條目。為了示意起見,考慮表格100中的行102a。行102a包括下面的列值“1251”、“Joe”、“Book”和“10”。注意到,符號表110包括用于值“Joe”、“Book”和“10”的條目,它們是出現(xiàn)在行102a中的表格100中的重復數(shù)據(jù)值。當將行102a寫到盤時,只有唯一值“1251”單獨地寫到盤。這在盤上行結(jié)構(gòu)102中b顯示,對應(yīng)于表格100中行102a。盤上行結(jié)構(gòu)102b包括對應(yīng)于行102a中的“序號”列120的第一部分142,其包括唯一數(shù)據(jù)值“1251”。對于重復數(shù)據(jù)值,可以將指針或鏈接插入到盤上行結(jié)構(gòu)的適當部分,以指向符號表110中的適當條目。盤上行結(jié)構(gòu)102b包括對應(yīng)于行102a中的“客戶”列122的部分144,其被配置成包括指向符號表條目130的指針136,其與行102a的“客戶”列122中的重復數(shù)據(jù)值“Joe”匹配。盤上行結(jié)構(gòu)102b還包括對應(yīng)于行102a中的“項目”列124的部分146,其被配置成包括指向符號表條目134的指針138,其與行102a的“項目”列124中的重復數(shù)據(jù)值“Book”匹配。盤上行結(jié)構(gòu)102b進一步包括對應(yīng)于行102a中“價格”列126的部分148,其被配置成包括指向符號表條目132的指針140,其與行102a的“價格”列126中的重復數(shù)據(jù)值“10”匹配。表格100中的行104a和106a在被存儲到盤112上的塊114內(nèi)時的表現(xiàn)相似。于是,表格100中的行104a作為盤上行結(jié)構(gòu)104b被寫到盤。行104a的唯一數(shù)據(jù)值“1252”和“Tom”被單獨地寫入盤上行結(jié)構(gòu)104b中。行104a還包括分別列124和126中的重復行值“Book”和“10”。對應(yīng)于行104a中列124的盤上行結(jié)構(gòu)104b的部分150被配置成包括指向符號表110中的條目134的指針154,其與重復數(shù)據(jù)值“Book”匹配。對應(yīng)于行104a中列126的盤上行結(jié)構(gòu)104b的部分152被配置成包括指向符號表110中的條目132的指針156,其與重復數(shù)據(jù)值“10”匹配。表格100中的行106a作為盤上行結(jié)構(gòu)106b被寫入盤。在行106a中,唯一數(shù)據(jù)值是“1253”、“Tape”和“20”,它們被單獨地寫入到盤上行結(jié)構(gòu)106b中。行106a還包括列122中的重復行值“Joe”。對應(yīng)于行106a中列122的盤上行結(jié)構(gòu)106b的部分160被配置成包括指向符號表110中的條目130的指針162,其與重復數(shù)據(jù)值“Joe”匹配。圖2示出用于將數(shù)據(jù)存儲到盤上的過程的實施例流程圖。在202,收到將數(shù)據(jù)存儲到盤上的請求。在一個實施例中,是否壓縮數(shù)據(jù)是用戶或系統(tǒng)選擇的一個選項。如果選擇壓縮,那么在204,就對將要存儲到給定數(shù)據(jù)塊中的數(shù)據(jù)的各部分進行數(shù)據(jù)分析以標識重復數(shù)據(jù)值。根據(jù)所標識的數(shù)據(jù)重復,創(chuàng)建一個符號表,其包括某些或全部重復數(shù)據(jù)值(206)。從而創(chuàng)建了該數(shù)據(jù)塊中的每一盤上行結(jié)構(gòu)。盤上行結(jié)構(gòu)被格式化以排除某些或全部重復數(shù)據(jù)值(208)。特別地,與重復數(shù)據(jù)值相關(guān)聯(lián)的盤上行結(jié)構(gòu)被設(shè)置成引用存儲關(guān)系數(shù)據(jù)值的符號表中的一個或多個適當條目。如果離線執(zhí)行該壓縮方法,那么就以批處理模式執(zhí)行行的分析和格式化,使得數(shù)據(jù)庫塊的全部內(nèi)容在寫到盤之前被預(yù)先組織過。離線處理使得可以精確地確定填入給定數(shù)據(jù)塊的行數(shù)。可替換地,可以在線執(zhí)行該壓縮方法,單獨地準備每一盤上行結(jié)構(gòu),并將其寫到盤上。在任何一種情況下,設(shè)置塊元數(shù)據(jù)以指示該塊中的數(shù)據(jù)、或該塊中的部分數(shù)據(jù)是否已經(jīng)被壓縮。在一個實施例中,塊的首部包括指示該塊或該塊中的數(shù)據(jù)是否已經(jīng)被壓縮的數(shù)據(jù)結(jié)構(gòu)。在一個實施例中,單個比特足以用于指示該塊中的數(shù)據(jù)是否被壓縮。在另一個實施例中,不是在數(shù)據(jù)被裝載到數(shù)據(jù)塊中時將數(shù)據(jù)壓縮,而是將未壓縮的數(shù)據(jù)塊轉(zhuǎn)換為壓縮數(shù)據(jù)。如圖9中所示,對數(shù)據(jù)塊進行分析,以標識重復數(shù)據(jù)值(9002)。根據(jù)所標識的數(shù)據(jù)重復,創(chuàng)建包括某些或全部重復數(shù)據(jù)值的符號表(9004)。將該符號表中數(shù)據(jù)值的某些或全部重復從該數(shù)據(jù)塊中去除或刪除(9006)。然后數(shù)據(jù)塊中的盤上行結(jié)構(gòu)被配置成引用存儲該關(guān)系數(shù)據(jù)值的符號表中的一個或多個適當條目(9008)。如果單個塊內(nèi)數(shù)據(jù)重復的可能性較低,那么所期望的壓縮比也可能較低。如果這種重復的可能性較高,則所期望的壓縮比也可能較高。于是,可以對行進行重組以增加這種重復的可能性。對于單列表格,這樣做的一種方法就是按照列值對表格的行進行排序。在結(jié)構(gòu)化查詢語言(SQL)中,這可以通過執(zhí)行帶有排序子句(clause)的語句“CREATETABLEASSELECT”實現(xiàn)。通過按照較低基數(shù)(cardinality)列對表格的行進行排序,也可以將這種類型的技術(shù)應(yīng)用于一列基數(shù)較低,而其它列的基數(shù)較高的表格。對于具有多個較低基數(shù)列的表格,可以通過首先確定具有最低基數(shù)的列來執(zhí)行調(diào)節(jié)以實現(xiàn)更好的壓縮比??梢酝ㄟ^執(zhí)行語句“SELECTCOUNT(DISTINCT(c))fromT;”來確定列的基數(shù)。一旦確定了最低基數(shù)的列(假定為列C1),對于所選列的固定值,就確定了其它列的基數(shù)。對于除了C1之外的所有列cK,其可以通過執(zhí)行語句“SELECTSUM(count(*)*COUNT(DISTINCT(cK)))fromTgroupbyC1”測得。假定列C2具有最低的這種測量值。于是在固定了頭2列之后確定具有最低基數(shù)的列。對于除了C1和C2之外的所有列cK,可以通過執(zhí)行語句“SELECTSUM(count(*)*COUNT(DISTINCT(cK)))fromTgroupbyC1,C2”測得。通過繼續(xù)進行該過程,就可以確定某個列序列Cl,C2,...,Cn。該序列可以用作創(chuàng)建表格壓縮語句的ORDEREDBY子句中的列序列。圖3示出了用于從盤檢索數(shù)據(jù)的過程的實施例的流程圖。在302,接收到從盤檢索數(shù)據(jù)的請求。在304,標識正被搜索的特定塊或行。可以使用任何常規(guī)的定索引或查找技術(shù)來執(zhí)行操作304。在306,判定該關(guān)系數(shù)據(jù)庫塊是否以壓縮格式存儲。在一個實施例中,訪問該塊的首部來做出該判定。如果塊沒有被壓縮,那么就立即從盤檢索該請求的行信息(310),并返回到請求實體(312)。如果塊被壓縮,那么就訪問所請求行的關(guān)系盤上行結(jié)構(gòu),以從符號表中檢索重復數(shù)據(jù)值(308)。另外,也從盤上行結(jié)構(gòu)檢索單獨存儲的數(shù)據(jù)值(310)。在312,將該組完整的請求數(shù)據(jù)返回到請求實體。在符號表中可以使用遞歸符號條目。遞歸符號條目是在符號表中本身引用一個或多個其它符號表條目的條目。圖4示意了使用遞歸符號條目對數(shù)據(jù)塊格式化,以存儲圖1的表格100。類似于圖1的符號表110,遞歸符號表410包括存儲數(shù)據(jù)值“Joe”的條目430、存儲數(shù)據(jù)值“10”的條目432、和存儲數(shù)據(jù)值“Book”的條目434。與圖1的符號表110有所不同,遞歸符號表410包括引用符號表410內(nèi)其它條目的遞歸符號表條目480。特別地,遞歸符號表條目480包括第一部分482,其與指向條目434中的數(shù)據(jù)值“Book”的鏈結(jié)486相關(guān)聯(lián)。遞歸符號表條目480也包括第二部分482,其與指向條目432中的數(shù)據(jù)值“10”的鏈接488相關(guān)聯(lián)。通過組合第一部分482和第二部分484,條目480邏輯地創(chuàng)建了順序包括兩個引用數(shù)據(jù)值的條目,即在數(shù)據(jù)值“10”之前直接具有數(shù)據(jù)值“Book”。通過這種方式組合多個條目的一個優(yōu)點是,對于存儲在塊中的行,存在可能與這些組合匹配的列值序列。在盤上行結(jié)構(gòu)與符號表中的單個數(shù)據(jù)值之間不是具有多個鏈接或指針結(jié)構(gòu),而是可以使用單個鏈接或指針結(jié)構(gòu)來指向遞歸地鏈接到多個其它條目的組合條目。參照圖1的表格100,行102a和行104a中的列124和126依次具有數(shù)據(jù)值“Book”和“10”。在圖1中,盤上行結(jié)構(gòu)102b(其對應(yīng)于行102a)包括指向數(shù)據(jù)值“Book”的鏈接138,和指向數(shù)據(jù)值“10”的單獨鏈接140。類似地,盤上行結(jié)構(gòu)104b(其對應(yīng)于行104a)包括指向數(shù)據(jù)值“Book”的鏈接154,和指向數(shù)據(jù)值“10”的單獨鏈接156。從這些盤上行結(jié)構(gòu)到符號表110中的條目共有4個鏈接。在圖4的遞歸方法中,盤上行結(jié)構(gòu)402b(對應(yīng)于行102a)包括要單個鏈接472,其指向由遞歸符號表條目480表示的組合的順序數(shù)據(jù)值“Book”和“10”。這使得可以使用單個鏈接或指針結(jié)構(gòu)表示盤上行結(jié)構(gòu)402b中的兩部分446和448的值(對應(yīng)于行102a的列124和126)。類似地,盤上行結(jié)構(gòu)404b(對應(yīng)于行104a)包括單個鏈接476,其指向由遞歸符號表條目480表示的組合的順序數(shù)據(jù)值“Book”和“10”。這同樣使得可以使用單個鏈接或指針結(jié)構(gòu)表示盤上行結(jié)構(gòu)404b中的兩部分450和452的值(對應(yīng)于行104a的列124和126)。最終結(jié)果就是,圖4的方法在盤上行結(jié)構(gòu)與符號表之間所需要的鏈接或指針比圖1的方法所需的少。圖4減少鏈接或指針的數(shù)目的方法也可以采用符號表410中的非遞歸組合條目。特別地,可以配置條目480,使得部分482明確地存儲數(shù)據(jù)值“Book”,而不是將其與指向條目434的遞歸鏈接486相關(guān)聯(lián)。也可以配置條目480的部分484以明確地存儲數(shù)據(jù)值“10”,而不是將其與指向條目432的鏈接488相關(guān)聯(lián)。該方法還可以減少盤上行結(jié)構(gòu)與符號表410之間的鏈接數(shù)目,但代價是可能會增加在符號表410中明確地存儲重復數(shù)據(jù)值所需要的盤空間量。符號表410中的條目也可以包括各種遞歸鏈接的組合,和明確存儲的數(shù)據(jù)值。雖然圖4所示的范例只有2個數(shù)據(jù)值組合為遞歸符號條目480,但是可以擴展該發(fā)明概念,以在組合符號表條目中包括任何數(shù)目的數(shù)據(jù)值。在一個實施例中,可以進行列的重新排序以提高壓縮比。如在最后章節(jié)中所提到的,對于存儲在給定塊中的行,如果存在重復的列值序列,那么可以通過創(chuàng)建指向符號表中的組合條目的鏈接,來減少符號表與盤上行結(jié)構(gòu)之間的鏈接數(shù)目??梢赃M行列的重新排序,以增加列值的重復序列的數(shù)目。在一個實施例中,可以以數(shù)據(jù)塊的粒度級別進行列的重新排序。或者,可以以其它粒度進行列的重新排序,例如跨多個塊進行。為了示意,考慮圖5中所示的數(shù)據(jù)庫表格600。表格600包括3行數(shù)據(jù),每一行具有“序號”列、“價格”列、“項目”列、和“數(shù)量”列。行602a具有如下數(shù)據(jù)值序列“1254”、“5”、“Book”和“2”。行604a具有如下數(shù)據(jù)值序列“1255”、“10”、“Tape”和“3”。行606a具有如下數(shù)據(jù)值序列“1256”、“10”、“Movie”和“3”。考慮列沒有重新排序的第一種情況。注意到數(shù)據(jù)值“10”和“3”在這些行中重復。于是,當將該表格寫到盤680時,可以創(chuàng)建符號表650,其具有第一條目652,數(shù)據(jù)值為“10”,第二條目654,數(shù)據(jù)值為“3”。當將行602a、604a和606a寫到盤時,與這些重復數(shù)據(jù)值相關(guān)聯(lián)的這些行的每一盤上行結(jié)構(gòu)被配置成引用符號表650中的適當條目。于是對應(yīng)于行604a的盤上行結(jié)構(gòu)604b具有部分641(對應(yīng)于“價格”列中的數(shù)據(jù)值),其與指向符號表650中數(shù)據(jù)值“10”的條目652的鏈接640相關(guān)聯(lián)。盤上行結(jié)構(gòu)604b也具有部分643(對應(yīng)于“數(shù)量”列中的數(shù)據(jù)值),其與指向符號表650中數(shù)據(jù)值“3”的條目654的鏈接642相關(guān)聯(lián)。對應(yīng)于行606a的盤上行結(jié)構(gòu)606b具有部分645(對應(yīng)于“價格”列中的數(shù)據(jù)值),其與指向符號表650中數(shù)據(jù)值“10”的條目652的鏈接646相關(guān)聯(lián)。盤上行結(jié)構(gòu)606b也具有部分647(對應(yīng)于“數(shù)量”列中的數(shù)據(jù)值),其與指向符號表650中數(shù)據(jù)值“3”的條目654的鏈接644相關(guān)聯(lián)。因為行602a并不包括任何重復數(shù)據(jù)值,因此其相關(guān)聯(lián)的盤上行結(jié)構(gòu)602b明確地存儲每一列值,并且不包括到符號表的任何引用。考慮如果對表格600進行列的重新排序。對表格中的行執(zhí)行列的重新排序,以增加列值的序列重復的可能性。在本范例中,通過交換表格600中“項目”列和“數(shù)量”列之間的順序,可以看到在“價格”列與“數(shù)量”列之間出現(xiàn)了值的序列的重復。這種列的重新排序的結(jié)果如圖5中的表格620所示。特別地,對于“價格”和“數(shù)量”列,現(xiàn)在行624a與626a都具有相同序列的數(shù)據(jù)值“10”和“3”。于是,當在盤682上創(chuàng)建符號表660時,可以插入組合條目666,其對于行624a和626a,在表格620中所示的序列中直接或間接地包括數(shù)據(jù)值“10”和“3”。如果組合條目666間接地包括這些值,那么條目666包括遞歸地引用條目662的第一部分668,和遞歸地引用條目664的第二部分670。當將行624a寫到盤時,其盤上行結(jié)構(gòu)624b與指向序列值“10”和“3”的組合條目666的單個鏈接632相關(guān)聯(lián)。這與盤上行結(jié)構(gòu)604b所采用的方式相反,后者對于相同的行沒有進行列的重新排序,使用兩個鏈接640和642來引用相同的兩個數(shù)據(jù)值。同樣的,當將行626a寫到盤時,其盤上行結(jié)構(gòu)626b與用于序列值“10”和“3”的單個鏈接636相關(guān)聯(lián)。這與盤上行結(jié)構(gòu)606b所采用的方式也相反,后者對于相同的行沒有進行列的重新排序,使用兩個鏈接646和644來引用相同的兩個數(shù)據(jù)值。圖6示出了利用列的重新排序?qū)?shù)據(jù)存儲到盤的過程的實施例的流程圖。在602接收到將數(shù)據(jù)存儲到盤上的請求。如果壓縮開啟,那么在604就對將要存儲到給定數(shù)據(jù)塊內(nèi)的數(shù)據(jù)部分進行數(shù)據(jù)分析以標識重復的數(shù)據(jù)值。該數(shù)據(jù)分析也包括對可能的列的重新排序組合進行分析,執(zhí)行其可以用來增加數(shù)據(jù)值的序列重復的可能性。對是否存在可能有利地通過列的重新排序而獲得的列序列做出判決(606)。如果存在,那么就對適當?shù)牧羞M行重新排序(608)。根據(jù)所標識的數(shù)據(jù)重復,創(chuàng)建包括某些或全部重復數(shù)據(jù)值的符號表(610)。從而創(chuàng)建了該數(shù)據(jù)庫塊中的每一盤上行結(jié)構(gòu),并且將其格式化以排除重復數(shù)據(jù)值(612),并將其寫到盤(614)。特別地,與重復數(shù)據(jù)值相關(guān)聯(lián)的每一盤上行結(jié)構(gòu)被設(shè)置成包括或引用指向符號表中存儲關(guān)系數(shù)據(jù)值的一個或多個適當條目的鏈接。設(shè)置塊元數(shù)據(jù)以指示該塊中的數(shù)據(jù)、或該塊中的部分數(shù)據(jù)是否已經(jīng)被壓縮。另外,也設(shè)置塊元數(shù)據(jù),以指示是否和如何對所存儲的數(shù)據(jù)執(zhí)行列的重新排序。在一個實施例中,塊的首部包括指示該塊或該塊中的數(shù)據(jù)是否被壓縮和/或被重新排序過的數(shù)據(jù)結(jié)構(gòu)。當從該塊中檢索到數(shù)據(jù)的時候,訪問該首部信息以能夠?qū)υ摂?shù)據(jù)重新排序,和未壓縮地回到其原始形式。可以進行優(yōu)化,從存儲行的盤上版本中除去NULL尾值。數(shù)據(jù)庫表格中的行可以在行的末尾處的一列或多列中包括NULL值。當將這些行寫到盤時,通過對于這些NULL值不分配、或不寫任何空間到盤中,可以實現(xiàn)附加的壓縮。相反,設(shè)置該存儲系統(tǒng)以識別如果特定數(shù)據(jù)庫行的盤上版本在該行的末尾并不包括列的一個或多個存儲值,那么這些列值被假定為NULL值。為了示意起見,考慮圖7的表格700,其將被存儲到盤720上的塊722。注意到,行702a和706a在行的最后一列都具有NULL值。當將這些行寫到盤720時,這些行的盤上行結(jié)構(gòu)被配置成排除NULL尾值。對應(yīng)于行702a的盤上行結(jié)構(gòu)702b并不包含為“首選”列中的NULL尾值分配的空間。相反,其只包括為出現(xiàn)在行702a中前導值“1260”、“Tom”和“10”分配的空間。對應(yīng)于行706a的盤上行結(jié)構(gòu)706b并不包含為NULL尾值分配的空間。相反,其只包括為出現(xiàn)在行706a中前導值“1262”、“Harry”和“30”分配的空間??梢詧?zhí)行列的重新排序,以增加NULL尾值在要存儲到盤的行中出現(xiàn)的可能性。分析一組數(shù)據(jù)的列值,以根據(jù)每一列中NULL值的數(shù)目對該列分類。重新排序該列,使得具有較多NULL值的列排在行的末尾,而具有越少NULL值的列排在越靠近行的開始。于是,具有最多NULL值的列會被重新排序到表格的末尾。具有其次多NULL值的列會被重新排序到表格的次尾,按照這樣的順序繼續(xù),直至得到有效排序的列。為了示意如果不進行列的重新排序可能會出現(xiàn)的效率低下,參照圖8中的表格800。表格800包括要被寫到盤的一組行802a、804a和806a。每一行包括一個或多個NULL值。行802a和806a在“樣式”列和“首選”列中包括NULL值。行804a在“樣式”列中包括NULL值。由于這些行中的NULL值都不是結(jié)尾的NULL,當將這些行寫到盤時,由于NULL值可能會在每一對應(yīng)的盤上行結(jié)構(gòu)中浪費空間。如圖所示,對應(yīng)于行802a的盤上行結(jié)構(gòu)802b包括兩個空間810和812,其分配給對應(yīng)于行802a的“樣式”和“首選”列中的值的NULL值。對應(yīng)于行804a的盤上行結(jié)構(gòu)804b包括空間814,其分配給對應(yīng)于行804a的“樣式”列中的值的NULL值。對應(yīng)于行806a的盤上行結(jié)構(gòu)806b包括兩個空間816和818,其分配給對應(yīng)于行806a的“樣式”和“首選”列中的值的NULL值??梢詧?zhí)行列的重新排序,以增加將表格800存儲到盤的壓縮效率。第一步是將列分類,以標識具有較多NULL值的特定列。這里可以看到,表格800中的“樣式”列具有最多的NULL值(每一行都是NULL值)?!笆走x”列具有其次多的NULL值(行802a和806a中是NULL值)。其它列都不包括NULL值。對這些列進行重新排序,將具有越多NULL值的列放在越靠近行的末尾。表格900示意了對表格800執(zhí)行該操作得到的結(jié)果。特別地,重新排序這些列,使得具有最多NULL值的“樣式”列放置在行的末尾。具有其次多NULL值的“首選”列放置在列序列中的次尾。由于其它列都不包含NULL值,它們都不重新排序。這種類型的重新排序使表格中的NULL尾值數(shù)量最多?,F(xiàn)在,分別對應(yīng)于表格800中行802a和806a的行902a和906a都包括兩個NULL尾值。行802a和806a都不包含任何NULL尾值。表格900中的行904a對應(yīng)于表格800中的行804a,其包括一個NULL尾值。行804a并不包含任何NULL尾值。當將表格900中的行902a、904a和906a寫到盤時,可以從每一行的盤上版本中去除NULL尾值。于是,對應(yīng)于表格900中的行902a的盤上行結(jié)構(gòu)902b排除了“首選”和“樣式”列的NULL值。盤上行結(jié)構(gòu)902b只包括3個字段,用于分別存儲“序號”、“客戶”和“價格”列的數(shù)據(jù)值“1270”、“Tom”和“5”。相反,盤上行結(jié)構(gòu)802b等同于在進行列的重新排序之前,其包括5個字段,用于分別存儲“序號”、“客戶”、“樣式”、“首選”和“價格”列的數(shù)據(jù)值“1270”、“Tom”、“NULL”、“NULL”和“5”。盤上行結(jié)構(gòu)904b對應(yīng)于表格900中的行904a,其排除了“樣式”列的NULL值。盤上行結(jié)構(gòu)904b只包括4個字段,用于分別存儲“序號”、“客戶”、“價格”和“首選”列的數(shù)據(jù)值“1271”、“Dick”、“10”和“GroundShip”。相反,盤上行結(jié)構(gòu)804b等同于在進行列的重新排序之前,其包括5個字段,用于分別存儲“序號”、“客戶”、“樣式”、“首選”和“價格”列的數(shù)據(jù)值“1271”、“Dick”、“NULL”、“GroundShip”和“10”。類似于盤上行結(jié)構(gòu)902b,對應(yīng)于表格900中的行906a的盤上行結(jié)構(gòu)906b排除了“首選”和“樣式”列的NULL值。盤上行結(jié)構(gòu)906b只包括3個字段,用于分別存儲“序號”、“客戶”和“價格”列的數(shù)據(jù)值。相反,盤上行結(jié)構(gòu)806b等同于在進行列的重新排序之前,其包括5個字段,用于分別存儲“序號”、“客戶”、“樣式”、“首選”和“價格”列的數(shù)據(jù)值。圖10中所示是提高數(shù)據(jù)庫查詢語言語句性能的方法。在1002,保持有描述數(shù)據(jù)塊中數(shù)據(jù)重復的信息。如前所述,有幾個方法可以保持數(shù)據(jù)重復信息,例如使用符號表。為了保持該數(shù)據(jù)重復信息,并不需要壓縮數(shù)據(jù)塊內(nèi)的數(shù)據(jù)。在1004,對于數(shù)據(jù)塊中的數(shù)據(jù)接收帶有至少一個謂詞的數(shù)據(jù)庫查詢語言語句。使用該數(shù)據(jù)重復信息降低謂詞評估的數(shù)目(1006)。通過減少謂詞評估的數(shù)目,就提高了數(shù)據(jù)庫查詢語言語句的性能。圖11中所示為一種保持數(shù)據(jù)重復信息的方法。標識一個或多個重復數(shù)據(jù)值(1102),并計算每一重復數(shù)據(jù)值出現(xiàn)的次數(shù)(1104)。在符號結(jié)構(gòu)的條目中存儲每一重復數(shù)據(jù)值及其相應(yīng)的出現(xiàn)次數(shù)(1106)。從數(shù)據(jù)塊中去除或刪除至少一個重復數(shù)據(jù)值的一次或多次出現(xiàn)(1108)。對應(yīng)于所去除的出現(xiàn)的數(shù)據(jù)塊部分被配置成引用適當?shù)姆柦Y(jié)構(gòu)條目(1110)??梢允褂面溄踊蛑羔榿硪迷撨m當?shù)姆柦Y(jié)構(gòu)條目。圖12中描繪了維持數(shù)據(jù)重復信息的范例。盤1202上的數(shù)據(jù)塊1204包含4個盤上行結(jié)構(gòu)1206-1212。每一盤上行結(jié)構(gòu)對應(yīng)于表格中的一行(未示出)。在數(shù)據(jù)塊1204中標識兩個重復數(shù)據(jù)值“HR”和“LA”,并將其連同每一重復數(shù)據(jù)值出現(xiàn)的次數(shù)一起存儲在符號結(jié)構(gòu)1214中。在實施例中,符號結(jié)構(gòu)1214連同行結(jié)構(gòu)1206-1212一起存儲在數(shù)據(jù)塊1204中。數(shù)據(jù)值“HR”出現(xiàn)兩次一次在行結(jié)構(gòu)1206的部分1216中,一次在行結(jié)構(gòu)1208的部分1220中。數(shù)據(jù)值“LA”出現(xiàn)三次一次在行結(jié)構(gòu)1206的部分1218中,一次在行結(jié)構(gòu)1210的部分1222中,還有一次在行結(jié)構(gòu)1212的部分1224中。如圖12中所示,刪除數(shù)據(jù)塊1204中的重復數(shù)據(jù)值,并且部分1216-1224被配置成引用符號結(jié)構(gòu)1214中的適當條目。圖13示意了保持數(shù)據(jù)重復信息的另一個方法。在1302,標識一個或多個重復數(shù)據(jù)值。計算每一重復數(shù)據(jù)值出現(xiàn)的次數(shù)(1304)。在符號結(jié)構(gòu)的條目中存儲每一重復數(shù)據(jù)值及其相應(yīng)的出現(xiàn)次數(shù)(1306)。當添加或刪除一個重復數(shù)據(jù)值的出現(xiàn)時,更新該重復數(shù)據(jù)值出現(xiàn)的次數(shù)(1308)。當該符號結(jié)構(gòu)條目中重復數(shù)據(jù)值的出現(xiàn)次數(shù)為零時,去除該符號結(jié)構(gòu)條目(1310)。在圖14中,關(guān)于盤1402上的數(shù)據(jù)塊1404的數(shù)據(jù)重復的信息保持在符號結(jié)構(gòu)1406中。在范例中,盤上行結(jié)構(gòu)1416的部分1418從數(shù)據(jù)值“LA”更新為數(shù)據(jù)值“SF”。相應(yīng)的,符號結(jié)構(gòu)1406中的條目1420對應(yīng)于重復數(shù)據(jù)值“LA”,將其更新以反映出將數(shù)據(jù)值“LA”從數(shù)據(jù)塊1404中刪除。圖15中所示的實施例為提高數(shù)據(jù)庫查詢語言語句性能的方法。在1502,保持數(shù)據(jù)重復的信息。接收數(shù)據(jù)庫查詢語言語句(1504)。該數(shù)據(jù)庫查詢語言語句包括至少一個謂詞。在重復數(shù)據(jù)值上至多對謂詞進行一次評估(1506)。圖16示意的處理流程是提高數(shù)據(jù)庫查詢語言語句性能的另一個方法。在該實施例中,保持數(shù)據(jù)重復信息(1602)。接收帶有至少一個謂詞的數(shù)據(jù)庫查詢語言語句(1604),并訪問數(shù)據(jù)值(1606)。在該數(shù)據(jù)值上評估該至少一個謂詞之前,判定以前是否已經(jīng)在該數(shù)據(jù)值的重復上評估過該謂詞(1608)。如果以前還沒有在該數(shù)據(jù)值的重復上評估過該謂詞,就在該數(shù)據(jù)值上評估該謂詞(1610)。如果以前已經(jīng)在該數(shù)據(jù)值的重復上評估過該謂詞,就使用先前謂詞評估的結(jié)果,而不是在該同一數(shù)據(jù)值上評估該謂詞(1612)。圖17中所示的范例為如何可以提高數(shù)據(jù)庫查詢語言語句的性能。針對表格1704中的數(shù)據(jù)接收數(shù)據(jù)庫查詢語言語句1702。數(shù)據(jù)庫查詢語言語句1702搜索以查找表格1704中滿足謂詞1706的所有記錄,即數(shù)據(jù)庫查詢語言語句1702搜索以查找表格1704中在列1708中具有數(shù)據(jù)值“LA”的所有記錄。首先訪問行1710。由于還沒有任何先前的謂詞評估,在行1710中的數(shù)據(jù)值1718上評估謂詞1706。將謂詞評估的結(jié)果存儲在上下文1726中。由于該謂詞評估的結(jié)果是真,返回行1710。然后訪問行1712。在行1712中的數(shù)據(jù)值1720上評估謂詞1706之前,判定以前是否已經(jīng)在該數(shù)據(jù)值1720的重復上評估過謂詞1706。在一個實施例中,檢查上下文1726,以確定是否存在數(shù)據(jù)值1720的重復——數(shù)據(jù)值“DC”的先前謂詞評估結(jié)果。由于謂詞1706先前被評估所基于的僅有數(shù)據(jù)值是“LA”,所以在數(shù)據(jù)值1720上評估謂詞1706。將謂詞評估的結(jié)果存儲在上下文1726中。由于該謂詞評估的結(jié)果是假,不返回行1712。接著訪問行1714。在行1714中的數(shù)據(jù)值1722上評估謂詞1706之前,判定以前是否已經(jīng)在數(shù)據(jù)值1722的重復上評估過謂詞1706。由于上下文1726包括對數(shù)據(jù)值“LA”的先前謂詞評估結(jié)果,其是數(shù)據(jù)值1722的重復,所以不在數(shù)據(jù)值1722上評估謂詞1706。相反,使用上下文1726中的先前謂詞評估結(jié)果。由于謂詞評估的結(jié)果是真,返回行1714。以類似的方式訪問和處理行1716。這樣,由于只是在2個數(shù)據(jù)值上、而不是在4個數(shù)據(jù)值上評估謂詞1706,提高了數(shù)據(jù)庫查詢語言語句的性能。圖18中所述是根據(jù)本發(fā)明的一個實施例,提高數(shù)據(jù)庫查詢語言語句的性能的方法。保持數(shù)據(jù)塊中數(shù)據(jù)重復的信息(1802)。在1804,接收帶有至少一個謂詞的數(shù)據(jù)庫查詢語言語句。使用該數(shù)據(jù)重復信息,減少謂詞評估的次數(shù)(1806)和被數(shù)據(jù)庫查詢語言語句訪問的數(shù)據(jù)量(1808)。圖19說明了一種減少被數(shù)據(jù)庫查詢語言語句訪問的數(shù)據(jù)量的方法。在1902計算該謂詞評估為真所基于的數(shù)據(jù)值的總數(shù)。然后在1904設(shè)置計數(shù)器等于所計算的該總數(shù)。訪問數(shù)據(jù)值(1906),并且在該數(shù)據(jù)值上評估該謂詞(1908)。如果謂詞評估的結(jié)果是假,那么該過程返回,并在1906訪問另一個數(shù)據(jù)值。如果謂詞評估的結(jié)果是真,那么該計數(shù)器減1(1910)。在1912,判定計數(shù)器現(xiàn)在是否等于零。如果該計數(shù)器不等于零,那么該過程返回到1906,并訪問另一個數(shù)據(jù)值。如果該計數(shù)器等于零,那么該過程就結(jié)束。在圖20中所示為如何使用數(shù)據(jù)重復信息來提高數(shù)據(jù)庫查詢語言語句的性能的范例。在圖20中,針對表格2004中的數(shù)據(jù)接收到數(shù)據(jù)庫查詢語言語句2002,將其存儲在數(shù)據(jù)塊2006中。數(shù)據(jù)庫查詢語言語句2002搜索以查找并返回表格2004的所有行,表格2004在“辦公室”列2016中包括數(shù)據(jù)值“LA”。表格2004包括10行4列——“ID”列2010、“姓名”列2012、“部門”列2014和“辦公室”列2016。在“ID”列2010和“姓名”列2012中都沒有重復數(shù)據(jù)值。“部門”列2014和“辦公室”列2016分別具有3個重復數(shù)據(jù)值。在圖20的實施例中,數(shù)據(jù)重復信息存儲在符號表2008中。符號表2008包括表格2004中每一重復數(shù)據(jù)值的拷貝,以及該重復數(shù)據(jù)值出現(xiàn)的對應(yīng)次數(shù)。符號表2008中的每一條目也包括條目編號,其可以在數(shù)據(jù)塊2006中用來引用符號表條目。如圖20中所述,使用對應(yīng)的符號表條目編號、而不是指向?qū)?yīng)符號表條目的指針或鏈接代替重復數(shù)據(jù)值在數(shù)據(jù)塊2006中的每次出現(xiàn)。為了評估數(shù)據(jù)庫查詢語言語句2002,訪問數(shù)據(jù)塊2006中的行結(jié)構(gòu)2018b,其對應(yīng)于表格2004中的行2018a。行結(jié)構(gòu)2018b的部分2020對應(yīng)于行2018a的列2016,由于其飲用符號表2008中的條目編號#3,所以從符號表2008中檢索重復數(shù)據(jù)值“LA”,并針對數(shù)據(jù)庫查詢語言語句2002中的謂詞進行評估。將謂詞評估的結(jié)果存儲在上下文2024中。然后將計數(shù)器2026設(shè)置為“3”,其等于重復數(shù)據(jù)值“LA”在表格2004中出現(xiàn)的次數(shù),由于“LA”是其中謂詞評估為真的僅有數(shù)據(jù)值。然后返回表格2004的行2018a,并且計數(shù)器2026減1。當計數(shù)器2026變?yōu)榱銜r,數(shù)據(jù)塊2006的順序行訪問可以結(jié)束,因為已經(jīng)返回了滿足該數(shù)據(jù)庫查詢語言語句的最大數(shù)目的行。接著訪問數(shù)據(jù)塊2006中的行結(jié)構(gòu)2028b,其對應(yīng)于表格2004中的行2028a。行結(jié)構(gòu)2028b的部分2030對應(yīng)于行2028a的列2016,其引用符號表2008中的條目編號#4。在從符號表2008中檢索重復數(shù)據(jù)值“DC”,并針對數(shù)據(jù)庫查詢語言語句2002中的謂詞進行評估之前,檢查上下文2024,以確定是否存在條目編號#4的先前謂詞評估結(jié)果。由于上下文2024并不包含條目編號#4的先前謂詞評估結(jié)果,所以從符號表2008中檢索重復數(shù)據(jù)值“DC”,并針對數(shù)據(jù)庫查詢語言語句2002中的謂詞進行評估。然后將謂詞評估的結(jié)果存儲在上下文2024中。因為謂詞評估的結(jié)果是假,所以不返回行2028a,并且計數(shù)器2026不減小。訪問數(shù)據(jù)塊2006中的行結(jié)構(gòu)2032b,其對應(yīng)于表格2004中的行2032a。行結(jié)構(gòu)2032b的部分2034對應(yīng)于行2032a的列2016,其引用符號表2008中的條目編號#3。由于上下文2024已經(jīng)包含條目編號#3的先前謂詞評估結(jié)果,所以并不需要再次評估該謂詞。假定條目編號#3的先前謂詞評估結(jié)果是真,那么返回行2032a,并且計數(shù)器2026減1。訪問數(shù)據(jù)塊2006中的行結(jié)構(gòu)2036b,其對應(yīng)于表格2004中的行2036a。類似于行結(jié)構(gòu)2032b的部分2034,行結(jié)構(gòu)2036b的部分2038對應(yīng)于行2036a的列2016,其引用符號表2008中的條目編號#3。由于上下文2024已經(jīng)包含條目編號#3的先前謂詞評估結(jié)果,所以并不需要再次評估該謂詞。假定條目編號#3的先前謂詞評估結(jié)果是真,那么返回行2036a,并且計數(shù)器2026減1。然后結(jié)束數(shù)據(jù)塊2006的順序行訪問,因為所有滿足數(shù)據(jù)庫查詢語言語句2002的行都已經(jīng)返回。在圖20中所示的范例中,不僅謂詞評估的次數(shù)從4減為2,而且所訪問的行數(shù)也從10減少到4,其是使用數(shù)據(jù)重復信息的結(jié)果。于是,通過保持數(shù)據(jù)塊內(nèi)數(shù)據(jù)重復的信息可以大大地提高數(shù)據(jù)庫查詢語言語句的性能。由于在圖20中只有唯一一個數(shù)據(jù)值可以滿足數(shù)據(jù)庫查詢語言語句的謂詞,通過簡單地查看符號表2008,就可以計算該數(shù)據(jù)塊中謂詞評估為真所基于的數(shù)據(jù)值的總數(shù)。當不止唯一一個數(shù)據(jù)值滿足數(shù)據(jù)庫查詢語言語句的謂詞時,通過累加數(shù)據(jù)塊中滿足該謂詞的每一唯一數(shù)據(jù)值出現(xiàn)的次數(shù),計算該數(shù)據(jù)塊中謂詞評估為真所基于的數(shù)據(jù)值的總數(shù)。例如,如果3個不同的唯一數(shù)據(jù)值X、Y和Z滿足該謂詞,并且X在數(shù)據(jù)塊中出現(xiàn)5次,Y在數(shù)據(jù)塊中出現(xiàn)8次,Z在數(shù)據(jù)塊中出現(xiàn)3次,那么數(shù)據(jù)塊中謂詞評估為真所基于的數(shù)據(jù)值的總數(shù)等于5加8加3,等于16。因此,圖20中的計數(shù)器2026設(shè)置為16,并且每次返回滿足的數(shù)據(jù)時減1。所以,可以顯著地減少滿足數(shù)據(jù)庫查詢語言語句所訪問的數(shù)據(jù)量。圖21所述的處理流程是提高數(shù)據(jù)庫查詢語言語句性能的另一個方法。保持數(shù)據(jù)塊中數(shù)據(jù)重復的信息(2102)。在2104,接收帶有至少一個謂詞的數(shù)據(jù)庫查詢語言語句。使用該數(shù)據(jù)重復信息減少謂詞評估的次數(shù)(2106)。另外,不是訪問數(shù)據(jù)值來滿足該數(shù)據(jù)庫查詢語言語句,而是更新該數(shù)據(jù)重復信息(2108)。圖22中所示的范例為如何可以通過更新數(shù)據(jù)重復信息、而不是通過訪問數(shù)據(jù)值來滿足數(shù)據(jù)庫查詢語言語句。針對表格2204接收數(shù)據(jù)庫查詢語言語句2202,其存儲在盤2208的數(shù)據(jù)塊2206中。數(shù)據(jù)庫查詢語言語句2202進行查找,以將表格2004的“辦公室”列中的數(shù)據(jù)值“LA”從“LA”改變?yōu)椤癝F”。由于在符號結(jié)構(gòu)2212中已經(jīng)保持有數(shù)據(jù)重復信息,如上關(guān)于圖12的描述,所以只有符號結(jié)構(gòu)2212中的條目2214需要從“LA”更新為“SF”以滿足數(shù)據(jù)庫查詢語言語句2202。這樣,當使用數(shù)據(jù)重復信息時,數(shù)據(jù)庫查詢語言語句的性能大大地提高了。系統(tǒng)體系結(jié)構(gòu)概述在圖23的方框圖所描述的計算機系統(tǒng)2300上可以實施本發(fā)明提高數(shù)據(jù)庫查詢語言語句的方法。計算機系統(tǒng)2300包括總線2302、或其它用于傳遞信息的通信機制,和與總線2302耦合用于處理信息的處理器2304。計算機系統(tǒng)2300也包括主存儲器2306,諸如隨機訪問存儲器(RAM)或其它動態(tài)存儲器件,其與總線2302耦合,用于存儲信息和由處理器2304執(zhí)行的指令。主存儲器2306在處理器2304執(zhí)行指令期間也可以用于存儲臨時變量或其它中間信息。計算機系統(tǒng)2300進一步包括與總線2302耦合的只讀存儲器(ROM)2308或其它靜態(tài)存儲器件,用于存儲靜態(tài)信息和處理器2304的指令。提供有存儲器件2310、諸如磁盤或光盤,并且其與總線2302耦合用于存儲信息和指令。計算機系統(tǒng)2300也可以通過總線2302與顯示器2312、諸如陰極射線管(CRT)耦合,用于向計算機用戶顯示信息。輸入設(shè)備2314、包括字母數(shù)字和其它鍵,與總線2302耦合,用于向處理器2304傳遞信息和命令選擇。另一種類型的用戶輸入設(shè)備是光標控制2316,諸如鼠標、軌跡球、光標方向鍵,用于向處理器2304傳遞方向信息和命令選擇,以及用于控制顯示器2312上的光標移動。該輸入設(shè)備典型地具有兩個軸向上的自由度,第一軸(例如x)和第二軸(例如y),可以讓該設(shè)備指定平面中的位置。在一個實施例中,計算機系統(tǒng)2300用來提高數(shù)據(jù)庫查詢語言語句的性能。根據(jù)一個實施例,通過計算機系統(tǒng)2300響應(yīng)于處理器2304,執(zhí)行包含在主存儲器2306中的一個或多個指令的一個或多個序列而提供這種用途。這種指令可以從另一個計算機可讀介質(zhì)、諸如存儲器件2310讀入到主存儲器2306中。對包含在主存儲器2306中的指令序列的執(zhí)行使得處理器2304執(zhí)行此處所描述的處理步驟。在多處理設(shè)備中也可以采用一個或多個處理器來執(zhí)行包含在主存儲器2306中的指令序列。在其它實施例中,可以使用硬線電路來代替軟件指令、或與其結(jié)合使用。于是,本發(fā)明的實施例并不局限于硬件電路與軟件的任何具體組合。此處所使用的詞語“計算機可讀介質(zhì)”指的是在用于向處理器2304提供執(zhí)行指令的任何介質(zhì)。這種介質(zhì)可以是多種形式,包括但并不限于非易失性介質(zhì)、易失性介質(zhì)、和傳輸介質(zhì)。非易失性介質(zhì)例如包括光盤或磁盤,諸如存儲器件2310。易失性介質(zhì)包括動態(tài)存儲器、諸如主存儲器2306。傳輸介質(zhì)包括同軸電纜、銅線和纖維光學、以及包括總線2302的線。傳輸介質(zhì)也可以是聲波或光波的形式,諸如在無線電波和紅外數(shù)據(jù)通信中所產(chǎn)生的。普通形式的計算機可讀介質(zhì)例如包括軟盤、軟磁盤、硬盤、磁帶、或任何其它磁介質(zhì)、CD-ROM、任何其它光介質(zhì)、穿孔卡、紙帶、帶有孔圖案的任何其它物理介質(zhì)、RAM、PROM和EPROM、FLASH-EPROM、任何其它存儲芯片或磁帶、如此后所描述的載波、或計算機可讀取的任何其它介質(zhì)??梢允褂酶鞣N形式的計算機可讀介質(zhì)攜帶處理器2304執(zhí)行的一個或多個指令的一個或多個序列。例如,指令初始可以攜帶在遠程計算機的磁盤上。該遠程計算機可以將指令裝載到其動態(tài)存儲器中,并使用調(diào)制解調(diào)器在電話線上發(fā)送指令。位于計算機系統(tǒng)2300中的調(diào)制解調(diào)器可以接收電話線上的數(shù)據(jù),并使用紅外發(fā)射器將該數(shù)據(jù)轉(zhuǎn)換為紅外信號。與總線2302耦合的紅外檢測器可以接收紅外信號中攜帶的數(shù)據(jù),并將該數(shù)據(jù)放置在總線2302上??偩€2302將該數(shù)據(jù)傳送給主存儲器2306,處理器2304從其中檢索并執(zhí)行該指令。由主存儲器2306接收到的指令可以在被處理器2304執(zhí)行之前或之后,可選的存儲在存儲器件2310中。計算機系統(tǒng)2300也包括與總線2302耦合的通信接口2318。通信接口2318提供與網(wǎng)絡(luò)鏈路2320耦合的雙向數(shù)據(jù)通信,該鏈路與本地網(wǎng)絡(luò)2322連接。例如,通信接口2318可以是綜合業(yè)務(wù)數(shù)字網(wǎng)(ISDN)卡或調(diào)制解調(diào)器,提供到對應(yīng)類型電話線的數(shù)據(jù)通信連接。作為另一個范例,通信接口2318可以是提供到兼容LAN的數(shù)據(jù)通信連接的局域網(wǎng)(LAN)卡。也可以通過無線鏈路實施。在任何這種實施方式中,通信接口2318發(fā)送和接收電子、電磁或光學信號,其攜帶表示各種類型的信息的數(shù)字數(shù)據(jù)流。網(wǎng)絡(luò)鏈路2320典型地提供通過一個或多個網(wǎng)絡(luò)到其它設(shè)備的數(shù)據(jù)通信。網(wǎng)絡(luò)鏈路2320例如可以提供通過網(wǎng)絡(luò)2322到主計算機2324、或者到由互聯(lián)網(wǎng)服務(wù)提供商(ISP)2326操作的數(shù)據(jù)設(shè)備的連接。ISP2326最終提供通過全球網(wǎng)包數(shù)據(jù)通信網(wǎng)絡(luò)、現(xiàn)在一般稱為“互聯(lián)網(wǎng)”的2328的數(shù)據(jù)通信業(yè)務(wù)。本地網(wǎng)絡(luò)2322和互聯(lián)網(wǎng)2328都使用攜帶數(shù)字數(shù)據(jù)流的電子、電磁或光學信號。通過各種網(wǎng)絡(luò)的信號和網(wǎng)絡(luò)鏈路2320上并通過通信接口2318的信號將數(shù)字數(shù)據(jù)攜帶至計算機系統(tǒng)2300、或從其帶走,它們都是范例形式的傳輸信息的載波。計算機系統(tǒng)2300可以通過網(wǎng)絡(luò)鏈路2320和通信接口2318發(fā)送和接收數(shù)據(jù),包括程序編碼。在互聯(lián)網(wǎng)的范例中,服務(wù)器2330可以通過互聯(lián)網(wǎng)2328、ISP2326、本地網(wǎng)絡(luò)2322和通信接口2318傳送應(yīng)用程序的請求編碼。根據(jù)本發(fā)明,這樣下載的一個應(yīng)用可以管理、存儲和從包含多個數(shù)據(jù)存儲器件的存儲系統(tǒng)中檢索數(shù)據(jù)。當接收到編碼時,其可以通過處理器2304執(zhí)行,和/或存儲到存儲器件2310、或其它非易失性存儲器中,用于以后執(zhí)行。通過這種方式,計算機系統(tǒng)2300可以獲得載波形式的應(yīng)用編碼。說明性實施例下面提供本發(fā)明實施例的詳細實施方式。在該實施例中,采用允許各種數(shù)據(jù)壓縮方式的塊數(shù)據(jù)格式。該數(shù)據(jù)塊格式可以用作現(xiàn)存系統(tǒng)的現(xiàn)存塊格式的擴展。該數(shù)據(jù)塊格式定義了如何將行片段存儲在數(shù)據(jù)塊中。塊的首部包括用于指示在特定塊中是否使用了任何或全部下面特征的字段塊級壓縮塊級列的重新排序行內(nèi)游程長度的NULL壓縮列的重新排序如果設(shè)置了列的重新排序的指示符,那么該塊使用塊級列的重新排序。如果N列分別具有一組行片段,那么對列編號進行塊級列的置換就可以對列重新排序。如果塊使用了列的重新排序,那么可以在塊的首部之后直接存儲兩個數(shù)組。第一數(shù)組存儲前導列的長度(fixed_width_column_count)。在本實施例中,塊中首先滿足fixed_width_column_count>=0的列是該塊中固定長度的列。在該實施例中,值fixed_width_column_count可以為零。第二數(shù)組存儲塊的列編號置換(ub1Perms[block-level_column_count])。列的重新排序至少有兩個優(yōu)點。第一,通過將適當?shù)牧蟹纸M在一起,列的重新排序可以產(chǎn)生更高的壓縮。第二,通過將固定長度的列移動到可變長度的列前面,列的重新排序提高了對第N列的訪問。如果第一組列在塊中具有固定的長度,可以將這些長度一次存儲在該塊中,而不是存儲在每一行中。這些長度可以存儲在長度數(shù)組中。這些數(shù)組可以被看作用于空間計算的塊首部的一部分。對列進行重新排序的另一個優(yōu)點就是,如果列在塊的所有行中都是NULL,那么可以有效地將其從所有行片段中“壓縮出”,因為NULL列并沒有任何數(shù)據(jù),并且將其長度存儲在該長度數(shù)組中。將塊級固定列的長度從行片段移動到塊級數(shù)組可以提供相對便宜的壓縮,如果列值較短這樣就特別有效,這種情況出現(xiàn)在數(shù)據(jù)是較高的數(shù)字的時候。在一個實施例中,對列進行重新排序后的行應(yīng)該具有相等的列數(shù),并且對應(yīng)的列應(yīng)該具有相等的長度。然而,并不是在所有的實施例中,給定塊中的所有行片段都必須具有這些屬性,因為在這種情況下,破壞這種要求的插入(Insert)和更新(Update)操作可能變得效率不高。因此在可選實施例中,在并不滿足重新排序要求的、對列重新排序后的塊中允許有行片段。對于對列重新排序后的塊,不對這些行片段的列進行重新排序。如果塊被重新排序并且壓縮,那么這些行片段要進行壓縮。因此,允許有只是部分滿足固定長度要求的行。列重新排序后的塊中的每一行與指定的字段關(guān)聯(lián),該字段標識該行中有多少前導列的長度符合塊級列長度數(shù)組參數(shù)。在一個實施例中,并不對轉(zhuǎn)發(fā)的行片段和刪除的行片段的列進行重新排序。也不對明確排除在列的重新排序之外的行片段的列進行重新排序。新數(shù)據(jù)層報頭的可變化部分包括存儲在perms數(shù)組中的置換和存儲在lens數(shù)組中的固定寬度列的長度。對于N列的塊中具有M個固定長度的列的行,變化部分占sizeof(ub1)×N+sizeof(ub2)×M個字節(jié)。假定sizeof(ub1)×N+sizeof(ub2)×M-3×N所占的空間(參考VARSPACE(M,N))不超過3×N。通過不存儲行片段內(nèi)固定寬度列的長度,每行至少可以節(jié)省M字節(jié)。對于具有K列被重新排序過的塊中的行,至少可以節(jié)省(M-1)×K字節(jié)(因為在ub1中有每行片段的固定長度列的計數(shù),所以是M-1)。在實施例中,平衡點是在K=5的時候,對于K>5就會開始有節(jié)省。在一個實施例中,應(yīng)該配置該過程,使得列重新排序后的數(shù)據(jù)不比未壓縮的數(shù)據(jù)占用更多的空間。如上所述,第一數(shù)組lens(ub2lens[fixed_width_column_count])包含塊的前n列的固定列長度(其中n=fixed_width_column_count)。不是在數(shù)組的每一元素中存儲列的長度,可以使用非交換求和對周圍可能的NULL值進行處理,存儲列長度的前綴和(prefixsum),如下lens←SIZEOF(column),lens[k]←lens[k-1]SIZEOF(column[k]),k>0其中如果該列是NULL,SIZEOF(col)≡0x8000,并且求和操作只占用右邊的操作數(shù)0x8000個比特,即不是可交換的。例如,考慮10個固定寬度列長度的序列,如下5,5,12,7,NULL,NULL,4,NULL,4,6,該數(shù)組會包含下列值5,10,22,29,32797,32797,33,32801,37,43。從該數(shù)組中提取第N列的長度的操作如下。首先,如果k<fixed_width_column_count,測試lens[k]&0x8000,以檢測列k是否是NULL。如果不是NULL,那么其長度為len←lens[k]-(1ens[k-1]&0x7FFF),k>0或len←lens,k=0如果塊中有多個固定寬度的列,那么該數(shù)組可以占用大量的空間。對于使用固定長度列的重新排序所可能存在的優(yōu)點就是,例如通過將NULL列全局地轉(zhuǎn)動到末尾并接著進行截取NULL尾值,可以壓縮出長序列的NULL列。通常,塊中固定長度的列越多,多個列具有相同列長度的可能性就越高。塊格式如果在塊的首部設(shè)置行壓縮指示符,那么其可以指示出塊中的全部或部分行被壓縮。僅僅是為了下面的解釋,假定給定塊的列已經(jīng)被重新排序過,該塊的第0至第(fixed_width_column_count-1)列都是固定長度,并且其余列的長度可變。進一步假定第0至第(fixed_width_column_count-1)列已經(jīng)將它們的長度刪除并將其存儲在塊級數(shù)組lens中。其余的列將它們的長度存儲在該列自己中。在實施例中,對該塊的行片段格式進行如下定義#defineSHORT_INDEX200#defineSHORT_LENGTH250#defineLONG_INDEX251#defineLONG_LENGTHSHORT_LENGTHSHORT_INDEX的值是指向符號表中的索引。對于值L∈[SHORT_INDEX,SHORT_LENGTH),len←(L-KDRCSSHORTINDEX)就是現(xiàn)場存儲的列(即未壓縮的列)的長度。LONG_INDEX的值指示后2個字節(jié)包含指向符號表中的索引值。值LONG_LENGTH指示隨后是一個未壓縮的列(首先是長度字節(jié))。行首部中的列計數(shù)字段包含出現(xiàn)在行中列長度前幾個字節(jié)的計數(shù)。在一個實施例中,符號表是table,其具有數(shù)據(jù)層的行。該符號表中的行并不具有標志字節(jié)或鎖定字節(jié)。對于標志字節(jié),例如可以通過獲取數(shù)據(jù)塊鎖定來對符號表條目進行鎖定。在一個實施例中,如果多符號表的操作非常不頻繁,可能會導致符號表操作的同時丟失。符號表行的標準或鎖定字節(jié)可以包含參考字節(jié),將其存儲為ub2。在實施例中,除了下面用來將第一長度字節(jié)值進行范圍劃分的常數(shù)之外,符號表行類似于行片段格式;#defineSYMTAB_SHORT_INDEX200#defineSYMTAB_SHORT_LENGTH250#defineSYMTAB_LONG_INDEX251#defineSYMTAB_LONG_LENGTHSYMTAB_SHORT_LENGTH對這些第一長度字節(jié)的解釋與如上對塊的行片段的相同。另外,在符號表中可以有多列條目。在實施例中,前綴、固定長度列的壓縮不同于其它列的壓縮。出現(xiàn)區(qū)別是因為從這些列中刪除了長度。可以進行下面的操作,通過使用停止字節(jié)Bi對前綴、固定長度的列進行壓縮。如果B0<SHORT_INDEX,行片段數(shù)據(jù)的第一字節(jié)B0是到符號表中的索引。否則(B0-SHORT_INDEX)就是隨后的現(xiàn)場存儲(即未壓縮)的固定長度列的數(shù)目。下一字節(jié)B1或者直接在B0之后,或者相應(yīng)地直接跟隨在前的(B0-SHORT_INDEX)列的數(shù)據(jù)。在跟隨Bk的列還是固定長度時,該定義繼續(xù)循環(huán)。壓縮器在實施例中,至少可以用兩個不同的壓縮方法。在線壓縮會遞增的形成被壓縮的塊。離線壓縮首先將足夠數(shù)目的行緩沖到緩沖器中,并然后盡實際可能的將足夠多的行放入壓縮區(qū)。在線壓縮的魅力是因為其不需要保持另外的緩沖器,或執(zhí)行另外的存儲拷貝(memcopy)操作。然而在某些情況下,在線壓縮的壓縮質(zhì)量可能會遠不如離線壓縮。例如,遞增地形成塊可能會在處理之前不對列進行完整的預(yù)分析,這可能會對有效地執(zhí)行塊級列的重新排序產(chǎn)生負面的影響。通過在大部分塊已經(jīng)形成之后,執(zhí)行塊重組(再壓縮),以試圖改善這些限制,這樣的開銷可能非常高。下面的描述是關(guān)于離線壓縮,其中處理大批組的行,以形成一個或多個完整的塊。每一數(shù)據(jù)列可以描述為指向緩沖器中、例如指向源表格的數(shù)據(jù)塊中其數(shù)據(jù)的指針。使用下面的詞語描述本發(fā)明的壓縮器-SingleEntry(SE)表示具有指向數(shù)據(jù)、數(shù)據(jù)長度和幾個參考計數(shù)的指針的列。-RowModel(RM)表示作為指向SE的指針和SE(列計數(shù))的計數(shù)的數(shù)組的行。-RowSetModel(RSM)表示作為指向RM的指針和行計數(shù)的數(shù)組的一組行。RSM構(gòu)造對于離線壓縮,由于壓縮器模塊對行進行緩沖,所以其建立一組行的RSM。在哈希表格中查找每一行列,并且如果沒有,為該列分配新的SE,否則使用指向現(xiàn)存SE的指針??梢允褂脛討B(tài)存儲管理器來減少碎片和存儲分配的開銷。在一個實施例中,該存儲管理器是用于只持續(xù)在單個塊壓縮期間的每塊臨時地分配,和持續(xù)在段壓縮期間的每段存儲。RSM表示作為SE指針的矩陣的一組行,其中相等的行指向相同的SE。每一SE將會成為單個列的符號表條目。一旦建立了RSM之后,可以根據(jù)SE參考計數(shù)產(chǎn)生由單個列條目組成的該符號表。對于某些數(shù)據(jù)集,這可以提供有效的壓縮,因為可以通過指向符號表中少量字節(jié)的索引對重復的SE編碼。為了得到更高的壓縮,可以使用指向符號表中的索引來代替列序列,并且創(chuàng)建多列符號表條目。MultiEntry(ME)表示多列符號表條目的候選值。使用其第一列的(row,column)對其進行描述,列計數(shù)更多的字段。在本實施例中,壓縮操作涉及到為給定的RSM標識一組有用的ME的操作??梢圆扇讉€步驟來執(zhí)行塊級列的重新排序的計算。在第一步(步驟A),可以使用經(jīng)驗規(guī)則計算塊級列的重新排序通過(列基數(shù)、列長度基數(shù))對列進行排序。RSM每使用該規(guī)則一次,壓縮器就確定列的重新排序一次。在一個實施例中,考慮下面的2列c1和c2,通過該排序規(guī)則使得c1≡c2,或者可認為c1比c2更可接受一些111211121112111211121122一旦完成步驟(A),可以進行字典建立(步驟(C))。該步驟包括標識RSM的{ME}??梢哉J為RSM是字母表上由指向SE的指針組成的文本。對于在8k塊的實施例中,該文本的長度大約在5000-10000個符號以內(nèi)(分別是200-400行25列),并且每塊的離散符號的數(shù)目大約在700-900個以內(nèi)。標識{ME}的問題因此可以認為是整數(shù)字母表上的替代壓縮問題,該字母表的大小大約是常規(guī)1字節(jié)字母表(256×32[700,900])的3倍。在實施例中,壓縮器在步驟A與步驟C之間另外執(zhí)行步驟B,并且此處將其稱為“前綴檢測”步驟。該步驟捕獲被壓縮的數(shù)據(jù)集的離散屬性,例如包括一組行的數(shù)據(jù)集的屬性。該數(shù)據(jù)集的離線屬性就是,其是一組行,其中列在步驟A中按照列基數(shù)對列進行排序過。可以為行組{ri}i=1n建立N-ary數(shù)字壓縮查找樹。該查找樹剛好具有N行的N個葉、根節(jié)點和幾個分支結(jié)點。可以通過下面的樹構(gòu)建程序描述該樹·空樹只包含根節(jié)點?!ぴ谙驑涮砑拥谝恍衦1之后,該樹包含根節(jié)點、一個葉節(jié)點和一個連接根與葉的邊(edge)。該邊用r1中的所有符號標記?!ぎ斚蛟摌涮砑有衦2時,添加一個葉節(jié)點。如果r2中的第一符號與r1中的第一符號相同,那么刪除舊的邊,向該樹添加新的分支節(jié)點,連接根與新的分支、并連接新的分支節(jié)點與兩個葉。用行r1和r2的最長的共同前綴來標記從根到新分支的邊。標記將新分支節(jié)點對應(yīng)地與具有行r1和r2后綴的葉連接起來的邊。如果r2中的第一符號與r1中的第一符號不相同,那么簡單地添加從根到新葉的新邊,其用來自r2的所有符號標記。對于RSM中的所有行循環(huán)地進行樹構(gòu)建。作為范例,假定向該樹添加4行ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOIQRSTUVWXYZ1BCDEFGHUKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTAAAAAA該樹從根節(jié)點分出兩個邊,一個是用r3中的所有符號標記的、連接根與r3的葉節(jié)點,另一個邊連接根與分支節(jié)點,標記該邊的符號是ABCDEFGHIJKLMNO對從該分支節(jié)點出來的兩個邊進行標記的符號相應(yīng)的是1QRSTUVWXYZ和PQRST。第一邊連接該分支與行r2的葉,第二邊連接該分支與另一個分支。最終,另一分支具有將其與r1和r4的葉連接起來的兩個邊,分別標記為UVWXYZ和AAAAAA。圖24所示的范例描述了該樹。該樹具有某些屬性·每一分支節(jié)點至少具有2個引出邊。·該樹至多具有2×N個節(jié)點和2×N個邊?!ゆ溄訌母饺~的邊標記得到對應(yīng)葉的行符號。·如果兩行共用相同的前綴,那么從根到它們的葉的路徑共用相同的邊,其累加長度等于最大的共用前綴長度?!し种Ч?jié)點與至少兩行共用的前綴之間存在一一對應(yīng)關(guān)系。如果使用出自該節(jié)點的子樹中葉節(jié)點的數(shù)目和從根到該節(jié)點的累加邊的長度標記該樹的每一分支節(jié)點,那么對于每一分支節(jié)點,我們可以立即說出有多少行共用終止于該節(jié)點的前綴。一旦構(gòu)建該樹,就可以在單樹深度優(yōu)先遍歷中進行標記,行數(shù)為N時其具有的復雜度為O(N)。一旦構(gòu)建并標記了該樹之后,繼續(xù)進行前綴檢測。根據(jù)簡單的遞歸程序進行前綴檢測。考慮下面20行的范例ABCDEFGHUKLMNOPacABCDEFGHUKLMNOPadABCDEFGHIJKLMNOPaeABCDEFGHIJKLMNOPafABCDEFGHIJKLMNOPagABCDEFGHIJKLMNOPahABCDEFGHIJKLMNOPaiABCDEFGHIJKLMNOPajABCDEFGHIJKLMNOPakABCDEFGHIJKLMNOPalABCDEFGHIJKLMNOPbmABCDEFGHIJKLMNOPbnABCDEFGHIJKLMNOPboABCDEFGHIJKLMNOPbpABCDEFGHIJKLMNOPbqABCDEFGHIJKLMNOPbrABCDEFGHIJKLMNOPbsABCDEFGHIJKLMNOPbtABCDEFGHIJKLMNOPbuABCDEFGHIJKLMNOPbv該樹的根節(jié)點n0具有的出自其的一個邊(n0,n1),標記為ABCDEFGHIJKLMNOP節(jié)點n1具有出自其的兩個邊(n1,n2)和(n1,n3),邊(n1,n2)標記為a并且邊(n1,n3)標記為b節(jié)點n2和n3標記為計數(shù)為10的葉節(jié)點,并且它們到根的距離為17。節(jié)點n1標記為計數(shù)為20的葉節(jié)點,并且它們到根的距離為16。對于該范例,在構(gòu)建{ME}中可以提供下面的選擇選擇1{ME}=(該符號表中沒有ME)選擇2{ME}={{ABCDEFGHIJKLMNOP}}(一個ME)選擇3{ME}={{ABCDEFGHIJKLMNOPa},{ABCDEFGHIJKLMNOPb}}(兩個ME)選擇4{ME}={{ABCDEFGHIJKLMNOP},{#0a},{#0b}}(三個ME)。執(zhí)行另一個樹的遍歷,以幫助選擇{ME}。該算法具有共同的步驟。在每一步驟時,一個分支節(jié)點是當前節(jié)點。該共同步驟由對下面選項進行的選擇組成選項1對于當前節(jié)點是適當?shù)那熬Y時,不創(chuàng)建另外的ME。選項2對于當前節(jié)點是適當?shù)那熬Y時,創(chuàng)建另外的ME;將終止于當前節(jié)點的前綴復制到這些ME中。選項3對于當前節(jié)點是適當?shù)那熬Y時,創(chuàng)建另外的ME;將終止于當前節(jié)點的前綴分解到單獨的ME中,并制造另一個指向其的指針。注意到對于上面20行的范例選擇1當前節(jié)點是n0時,由選項1給出;選擇2當前節(jié)點是n0時,由選項2給出,并且當前節(jié)點是n1時,由選項1給出;選擇3當前節(jié)點是n0時,由選項3給出,并且當前節(jié)點是n1時,由選項2給出;選擇4當前節(jié)點是n0時,由選項3給出,并且當前節(jié)點是n1時,由選項3給出。因此,前綴檢測算法遍歷該樹,在當前分支節(jié)點從上面提到的3個選項進行選擇,通過考慮·當前節(jié)點的標記;·在當前節(jié)點子樹中的所有相鄰節(jié)點中的標記;·創(chuàng)建新符號表條目的非零成本并且然后處理到該子樹。當該子樹遍歷到達葉節(jié)點時,如果對應(yīng)行的任何前綴壓縮了或者沒壓縮,其都“知道”,并且如果其壓縮了,其“知道”是使用哪一個MS壓縮的。這樣,在一個方法中,前置檢測從給定塊的一組最理想的{ME}中找到所有的前綴ME,或者如果該最理想的組是空或不包括任何前綴ME,其發(fā)現(xiàn)沒有ME。在實施例中,該壓縮器通過首先裝載標準的數(shù)據(jù)塊和其并行的RSM工作。在此之后,壓縮器通過試圖創(chuàng)建新的壓縮塊來壓縮RSM。如果來自該標準塊的行不能裝入到新壓縮塊(即沒有壓縮),那么該壓縮器將該壓縮塊寫入,并繼續(xù)對下一組行進行處理。否則,通過比較標準塊中的自由空間與壓縮塊中的自由空間,對壓縮增益進行估計。如果沒有壓縮增益或者壓縮壓縮最小,那么壓縮器將該壓縮塊寫入,并繼續(xù)對下一組行進行處理。否則,如果壓縮增益較大,那么估計通過插入可以裝入到塊中的行數(shù),并切換到緩沖模式。在緩沖模式中,構(gòu)建RSM而不裝載任何數(shù)據(jù)到塊中。一旦所估計數(shù)目的行已經(jīng)緩沖進入RSM中后,試圖再次壓縮RSM。存在3種可能的結(jié)果·RSM不能裝入單個壓縮塊中?!SM裝入了單個壓縮塊中,并且自由空間的浪費最小。·RSM裝入了單個壓縮塊中,并且還存在自由空間可以裝入更多的行。在第一種情況下,通過重復地將[known2fit,known2notfit]間隔二等分,其具有起始條件known2fit=未壓縮塊中的行數(shù),known2notfit=我們估計但是不能裝入的行數(shù),開始減少RSM中壓縮器試圖裝入到單個塊中的行數(shù)。在第二種情況下,將壓縮塊寫入,并繼續(xù)對下一組行進行處理。在第三種情況下,重新估計行數(shù)并繼續(xù)緩沖RSM。每一單獨的塊壓縮都包括執(zhí)行步驟A、步驟B、替換RSM中檢測的前綴,并將得到的RSM饋送到步驟C。解壓縮器本發(fā)明能夠?qū)嚎s數(shù)據(jù)進行非常快速、低系統(tǒng)開銷的解壓縮。在實施例中,可以直接從塊中得到列值/長度。因此,解壓縮過程也就是通過解釋塊首部比特、固定列和列置換數(shù)組(如果存在的話)、以及第一長度字節(jié)和該行引用的符號表條目,查找這些值??梢苑祷剡@些引用的數(shù)據(jù)值,而不需要執(zhí)行任何代價較高的解壓縮和重建算法。在前面的說明中,已經(jīng)參照其具體的實施例描述了本發(fā)明。但是顯然,不脫離本發(fā)明廣闊的精神和范圍可以對其做出各種修改和變化。例如,參照特定的排序處理過程描述上述處理流程。然而,可以改變所描述的許多處理過程的順序,而不影響本發(fā)明操作的范圍。說明書和附圖相應(yīng)的看作是說明性的,而不是限制性的。權(quán)利要求1.一種用于以壓縮格式存儲數(shù)據(jù)的方法,包括接收將數(shù)據(jù)存儲到盤上的一個或多個數(shù)據(jù)庫塊上的請求;分析該數(shù)據(jù),以確定冗余數(shù)據(jù)項目的存在;創(chuàng)建一個符號結(jié)構(gòu),以存儲該冗余數(shù)據(jù)項目;格式化對應(yīng)于該數(shù)據(jù)的盤上數(shù)據(jù)結(jié)構(gòu);和使該盤上數(shù)據(jù)結(jié)構(gòu)與對存儲在該符號結(jié)構(gòu)中的冗余數(shù)據(jù)項目的引用相關(guān)聯(lián),其中該盤上數(shù)據(jù)結(jié)構(gòu)不顯式包含該冗余數(shù)據(jù)項目的拷貝。2.根據(jù)權(quán)利要求1的方法,其中使用鏈接或指針來引用存儲在該符號結(jié)構(gòu)中的冗余數(shù)據(jù)項目。3.根據(jù)權(quán)利要求1的方法,其中該數(shù)據(jù)包括具有一個或多個行的關(guān)系數(shù)據(jù)。4.根據(jù)權(quán)利要求3的方法,其中在線處理每一行。5.根據(jù)權(quán)利要求3的方法,其中離線處理一組行。6.根據(jù)權(quán)利要求1的方法,其中重組該數(shù)據(jù),以增加冗余數(shù)據(jù)項目的可能性。7.根據(jù)權(quán)利要求6的方法,其中對重組考慮該數(shù)據(jù)的基數(shù)。8.根據(jù)權(quán)利要求1的方法,其中該符號結(jié)構(gòu)包括遞歸地引用該符號結(jié)構(gòu)中的另一條目的條目。9.根據(jù)權(quán)利要求8的方法,其中該條目引用該符號結(jié)構(gòu)中的多個其它條目。10.根據(jù)權(quán)利要求8的方法,其中該條目包括所存儲的冗余數(shù)據(jù)項目和遞歸地引用該符號結(jié)構(gòu)中的另一條目的條目。11.根據(jù)權(quán)利要求8的方法,包括與遞歸地引用該符號結(jié)構(gòu)中另一條目的條目相關(guān)聯(lián)的第二盤上數(shù)據(jù)結(jié)構(gòu)。12.根據(jù)權(quán)利要求8的方法,進一步包括第二盤上數(shù)據(jù)結(jié)構(gòu),其中該盤上數(shù)據(jù)結(jié)構(gòu)內(nèi)的多個字段共同地與一個引用相關(guān)聯(lián),該引用具有遞歸地引用該符號結(jié)構(gòu)中另一條目的條目。13.根據(jù)權(quán)利要求12的方法,其中數(shù)據(jù)列被重新排序。14.根據(jù)權(quán)利要求13的方法,其中數(shù)據(jù)列被重新排序,以增加該盤上數(shù)據(jù)結(jié)構(gòu)內(nèi)的多個字段的序列重復的可能性。15.根據(jù)權(quán)利要求12的方法,其中在數(shù)據(jù)庫塊的級別進行列的重新排序。16.根據(jù)權(quán)利要求13的方法,其中NULL尾值不包括在該盤上數(shù)據(jù)結(jié)構(gòu)中。17.根據(jù)權(quán)利要求1的方法,其中該數(shù)據(jù)塊包括指示是否應(yīng)用了壓縮的元數(shù)據(jù)。18.根據(jù)權(quán)利要求17的方法,其中該元數(shù)據(jù)包括單個比特。19.根據(jù)權(quán)利要求1的方法,其中該數(shù)據(jù)塊包括指示列是否被重新排序的元數(shù)據(jù)。20.一種用于檢索以壓縮格式存儲的數(shù)據(jù)的方法,包括接收從盤上的一個或多個數(shù)據(jù)庫塊檢索數(shù)據(jù)的請求;分析該請求,以確定要訪問的一個或多個數(shù)據(jù)塊;分析該一個或多個數(shù)據(jù)塊,以確定是否應(yīng)用了壓縮;檢索對應(yīng)于該數(shù)據(jù)的盤上數(shù)據(jù)結(jié)構(gòu);和對于被該盤上數(shù)據(jù)結(jié)構(gòu)引用的冗余數(shù)據(jù)項目,從一個符號結(jié)構(gòu)中檢索該冗余數(shù)據(jù)項目。21.根據(jù)權(quán)利要求20的方法,其中使用鏈接或指針來引用存儲在該符號結(jié)構(gòu)中的冗余數(shù)據(jù)項目。22.根據(jù)權(quán)利要求20的方法,其中該數(shù)據(jù)包括具有一個或多個行的關(guān)系數(shù)據(jù)。23.根據(jù)權(quán)利要求20的方法,其中該符號結(jié)構(gòu)包括遞歸地引用該符號結(jié)構(gòu)中的另一條目的條目。24.根據(jù)權(quán)利要求23的方法,其中該條目引用該符號結(jié)構(gòu)中的多個其它條目。25.根據(jù)權(quán)利要求23的方法,其中該條目包括所存儲的冗余數(shù)據(jù)項目和遞歸地引用該符號結(jié)構(gòu)中另一條目的條目。26.根據(jù)權(quán)利要求23的方法,包括檢索與遞歸地引用該符號結(jié)構(gòu)中另一條目的條目相關(guān)聯(lián)的第二盤上數(shù)據(jù)結(jié)構(gòu)。27.根據(jù)權(quán)利要求23的方法,進一步包括檢索第二盤上數(shù)據(jù)結(jié)構(gòu),其中該盤上數(shù)據(jù)結(jié)構(gòu)中的多個字段共同地與一個引用相關(guān)聯(lián),該引用具有遞歸地引用該符號結(jié)構(gòu)中另一條目的條目。28.根據(jù)權(quán)利要求20的方法,其中重新構(gòu)建先前被刪除的NULL尾值。29.一種用于存儲數(shù)據(jù)的方法,包括接收存儲數(shù)據(jù)的請求,該數(shù)據(jù)包括多個列;重新排序該多個列,以增加NULL尾值的可能性;和創(chuàng)建該數(shù)據(jù)的存儲版本,其中該數(shù)據(jù)的存儲版本不包括該NULL尾值。30.根據(jù)權(quán)利要求29的方法,其中將該數(shù)據(jù)的存儲版本寫到盤上。31.根據(jù)權(quán)利要求29的方法,進一步包括創(chuàng)建元數(shù)據(jù)的操作,該元數(shù)據(jù)指示該NULL尾值不包括在該存儲版本中。32.一種用于在數(shù)據(jù)庫塊上存儲數(shù)據(jù)的結(jié)構(gòu),包括用于在盤上存儲冗余數(shù)據(jù)項目的符號結(jié)構(gòu);和在盤上的盤上數(shù)據(jù)結(jié)構(gòu),其包括對該符號結(jié)構(gòu)中該冗余數(shù)據(jù)項目的引用。33.根據(jù)權(quán)利要求32的結(jié)構(gòu),其中使用鏈接或指針來引用存儲在該符號結(jié)構(gòu)中的冗余數(shù)據(jù)項目。34.根據(jù)權(quán)利要求32的結(jié)構(gòu),其中該數(shù)據(jù)包括具有一個或多個行的關(guān)系數(shù)據(jù)。35.根據(jù)權(quán)利要求32的結(jié)構(gòu),其中該符號結(jié)構(gòu)包括遞歸地引用該符號結(jié)構(gòu)中的另一條目的條目。36.根據(jù)權(quán)利要求35的結(jié)構(gòu),其中該條目引用該符號結(jié)構(gòu)中的多個其它條目。37.根據(jù)權(quán)利要求35的結(jié)構(gòu),其中該條目包括所存儲的冗余數(shù)據(jù)項目和遞歸地引用該符號結(jié)構(gòu)中的另一條目的條目。38.根據(jù)權(quán)利要求35的結(jié)構(gòu),包括與遞歸地引用該符號結(jié)構(gòu)中另一條目的條目相關(guān)聯(lián)的第二盤上數(shù)據(jù)結(jié)構(gòu)。39.根據(jù)權(quán)利要求35的結(jié)構(gòu),進一步包括第二盤上數(shù)據(jù)結(jié)構(gòu),其中該盤上數(shù)據(jù)結(jié)構(gòu)中的多個字段共同地與一個引用相關(guān)聯(lián),該引用具有遞歸地引用該符號結(jié)構(gòu)中另一條目的條目。40.根據(jù)權(quán)利要求32的結(jié)構(gòu),其中數(shù)據(jù)列被重新排序。41.根據(jù)權(quán)利要求40的結(jié)構(gòu),其中數(shù)據(jù)列被重新排序,以增加該盤上數(shù)據(jù)結(jié)構(gòu)內(nèi)的多個字段的序列重復的可能性。42.根據(jù)權(quán)利要求32的結(jié)構(gòu),其中NULL尾值不包括在該盤上數(shù)據(jù)結(jié)構(gòu)中。43.根據(jù)權(quán)利要求32的結(jié)構(gòu),其中該數(shù)據(jù)塊包括指示是否應(yīng)用了壓縮的元數(shù)據(jù)。44.根據(jù)權(quán)利要求43的結(jié)構(gòu),其中該元數(shù)據(jù)包括單個比特。45.根據(jù)權(quán)利要求32的結(jié)構(gòu),其中該數(shù)據(jù)庫塊包括指示是否對列重新排序的元數(shù)據(jù)。46.一種用于提高數(shù)據(jù)庫查詢語言語句的性能的方法,該方法包括保持描述數(shù)據(jù)塊中的數(shù)據(jù)重復的信息;接收針對該數(shù)據(jù)塊中的數(shù)據(jù)的數(shù)據(jù)庫查詢語言語句,該數(shù)據(jù)庫查詢語言語句至少包括一個謂詞(predicate);和使用該數(shù)據(jù)重復信息減少在該數(shù)據(jù)塊中的數(shù)據(jù)上進行謂詞評估的次數(shù)。47.根據(jù)權(quán)利要求46的方法,其中保持描述數(shù)據(jù)塊中的數(shù)據(jù)重復的信息包括標識該數(shù)據(jù)塊中的一個或多個重復數(shù)據(jù)值;計算該一個或多個重復數(shù)據(jù)值中的每一個所出現(xiàn)的次數(shù);和存儲該一個或多個重復數(shù)據(jù)值中的每一個,以及該重復數(shù)據(jù)值在一個符號結(jié)構(gòu)的條目中出現(xiàn)的對應(yīng)次數(shù)。48.根據(jù)權(quán)利要求47的方法,其中保持描述數(shù)據(jù)塊中的數(shù)據(jù)重復的信息進一步包括從該數(shù)據(jù)塊中去除該一個或多個重復數(shù)據(jù)值的至少其中之一的一次或多次出現(xiàn);和配置該數(shù)據(jù)塊的對應(yīng)于所刪除的出現(xiàn)的部分,以引用該適當?shù)姆柦Y(jié)構(gòu)條目。49.根據(jù)權(quán)利要求48的方法,其中使用鏈接或指針來引用該適當?shù)姆柦Y(jié)構(gòu)條目。50.根據(jù)權(quán)利要求47的方法,其中保持描述數(shù)據(jù)塊中的數(shù)據(jù)重復的信息進一步包括當添加或刪除該重復數(shù)據(jù)值的出現(xiàn)時,更新該一個或多個重復數(shù)據(jù)值的其中之一的出現(xiàn)次數(shù)。51.根據(jù)權(quán)利要求50的方法,其中保持描述數(shù)據(jù)塊中的數(shù)據(jù)重復的信息進一步包括當符號結(jié)構(gòu)條目中該重復數(shù)據(jù)值的出現(xiàn)次數(shù)為零時,刪除該符號結(jié)構(gòu)條目。52.根據(jù)權(quán)利要求46的方法,其中減少在該數(shù)據(jù)塊中的數(shù)據(jù)上進行謂詞評估的次數(shù)包括在該數(shù)據(jù)塊中的重復數(shù)據(jù)值上評估該至少一個謂詞至多一次。53.根據(jù)權(quán)利要求46的方法,其中減少在該數(shù)據(jù)塊中的數(shù)據(jù)上進行謂詞評估的次數(shù)包括在數(shù)據(jù)值上評估該至少一個謂詞之前,判定是否先前已經(jīng)在該數(shù)據(jù)塊中的該數(shù)據(jù)值的重復上評估了該至少一個謂詞;當先前已經(jīng)在該數(shù)據(jù)值的重復上評估了該至少一個謂詞時,利用先前在該數(shù)據(jù)值的重復上評估該至少一個謂詞的結(jié)果;和當先前沒有在該數(shù)據(jù)值的重復上評估該至少一個謂詞時,在該數(shù)據(jù)值上評估該至少一個謂詞。54.根據(jù)權(quán)利要求53的方法,其中判定是否先前已經(jīng)在該數(shù)據(jù)值的重復上評估了該至少一個謂詞包括驗證該數(shù)據(jù)值是否出現(xiàn)在上下文中,該上下文存儲該數(shù)據(jù)塊中先前評估該至少一個謂詞所基于的每一數(shù)據(jù)值,以及對應(yīng)的該先前謂詞評估的結(jié)果。55.根據(jù)權(quán)利要求46的方法,進一步包括使用該數(shù)據(jù)重復信息減少被該數(shù)據(jù)庫查詢語言語句訪問的數(shù)據(jù)量。56.根據(jù)權(quán)利要求55的方法,其中減少被該數(shù)據(jù)庫查詢語言語句訪問的數(shù)據(jù)量包括計算該數(shù)據(jù)塊中對該至少一個謂詞評估為真所基于的數(shù)據(jù)值的總數(shù);設(shè)置計數(shù)器等于該總數(shù);當訪問該數(shù)據(jù)塊中的對該至少一個謂詞評估為真所基于的數(shù)據(jù)值時,減小該計數(shù)器;和訪問該數(shù)據(jù)塊中的數(shù)據(jù)值,直至該計數(shù)器等于零。57.根據(jù)權(quán)利要求55的方法,其中減少被該查詢訪問的數(shù)據(jù)量包括更新該數(shù)據(jù)重復信息,而不是訪問數(shù)據(jù)塊中的數(shù)據(jù)值。58.根據(jù)權(quán)利要求46的方法,其中在該數(shù)據(jù)塊中保持該數(shù)據(jù)重復信息。59.一種包括計算機可讀介質(zhì)的計算機程序產(chǎn)品,該計算機可讀介質(zhì)在其上存儲有指令序列,該指令在被處理器執(zhí)行時,使得該處理器執(zhí)行用于以壓縮格式存儲數(shù)據(jù)的過程,該過程包括權(quán)利要求1-19中任何一項的操作。60.一種包括計算機可讀介質(zhì)的計算機程序產(chǎn)品,該計算機可讀介質(zhì)在其上存儲有指令序列,該指令在被處理器執(zhí)行時,使得該處理器執(zhí)行用于檢索以壓縮格式存儲的數(shù)據(jù)的過程,該過程包括權(quán)利要求20-28中任何一項的操作。61.一種包括計算機可讀介質(zhì)的計算機程序產(chǎn)品,該計算機可讀介質(zhì)在其上存儲有指令序列,該指令在被處理器執(zhí)行時,使得該處理器執(zhí)行用于存儲數(shù)據(jù)的過程,該過程包括權(quán)利要求29-31中任何一項的操作。62.一種包括計算機可讀介質(zhì)的計算機程序產(chǎn)品,該計算機可讀介質(zhì)在其上存儲有指令序列,該指令在被處理器執(zhí)行時,使得該處理器執(zhí)行用于提高數(shù)據(jù)庫查詢語言語句性能的過程,該過程包括權(quán)利要求46-58中任何一項的操作。63.一種用于以壓縮格式存儲數(shù)據(jù)的系統(tǒng),該系統(tǒng)包括用于執(zhí)行權(quán)利要求1-19中任何一項操作的裝置。64.一種用于檢索以壓縮格式存儲的數(shù)據(jù)的系統(tǒng),該系統(tǒng)包括用于執(zhí)行權(quán)利要求20-28中任何一項操作的裝置。65.一種用于存儲數(shù)據(jù)的系統(tǒng),該系統(tǒng)包括用于執(zhí)行權(quán)利要求29-31中任何一項操作的裝置。66.一種用于提高數(shù)據(jù)庫查詢語言語句性能的系統(tǒng),該系統(tǒng)包括用于執(zhí)行權(quán)利要求46-58中任何一項操作的裝置。全文摘要公開了一種用于在計算系統(tǒng)中實施存儲和檢索數(shù)據(jù)的方法和機制。通過減少或去除數(shù)據(jù)庫塊中的重復值,對所存儲的數(shù)據(jù)進行數(shù)據(jù)壓縮。不是將該重復數(shù)據(jù)值寫到該數(shù)據(jù)存儲單元,而是配置該盤上數(shù)據(jù),以引用存儲在符號表中的每一重復數(shù)據(jù)值的拷貝。也公開了一種用于提高數(shù)據(jù)庫查詢語言語句性能的方法和機制。保持描述數(shù)據(jù)塊內(nèi)數(shù)據(jù)重復的信息。在一個實施例中,當接收到針對該數(shù)據(jù)塊中的該數(shù)據(jù)的數(shù)據(jù)庫查詢語言語句時,使用該數(shù)據(jù)重復信息來減少在該數(shù)據(jù)塊中的數(shù)據(jù)上進行謂詞評估的次數(shù)。在另一個實施例中,使用該數(shù)據(jù)重復信息以減少被數(shù)據(jù)庫查詢語言語句訪問的數(shù)據(jù)量。文檔編號G06F17/30GK1666196SQ03815269公開日2005年9月7日申請日期2003年5月12日優(yōu)先權(quán)日2002年5月10日發(fā)明者德米特里·M·波塔波夫,塞廷·奧茲布藤申請人:甲骨文國際公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
玛曲县| 新宁县| 集贤县| 公安县| 莒南县| 台东县| 邵阳市| 富宁县| 酒泉市| 库伦旗| 武宣县| 清镇市| 巴东县| 利川市| 宕昌县| 和平县| 临漳县| 会理县| 和龙市| 辽源市| 洱源县| 清徐县| 乐平市| 班戈县| 什邡市| 鄂托克旗| 左权县| 绥化市| 行唐县| 永登县| 建水县| 阳江市| 林甸县| 盐津县| 荥阳市| 丰镇市| 涿鹿县| 吴忠市| 双桥区| 固安县| 菏泽市|