本發(fā)明的領(lǐng)域涉及數(shù)據(jù)庫。具體地,本發(fā)明的領(lǐng)域涉及根據(jù)多稀疏(sparse)索引組織表
背景技術(shù):數(shù)據(jù)庫使用表來組織信息。每個表包含多個行,其中每一行都對應(yīng)于一個數(shù)據(jù)庫記錄。使用鍵來組織數(shù)據(jù)庫。每個數(shù)據(jù)庫表將一列或多列指定為主鍵。此鍵的值對數(shù)據(jù)庫中的每個記錄是唯一的。例如,假設(shè)存在包含有關(guān)組織中的每一位員工的人事信息的表。這種情況下的主鍵的示例為每個雇員唯一的雇員序號。數(shù)據(jù)庫索引是提高表中的操作的速度的數(shù)據(jù)結(jié)構(gòu)??梢允褂靡粋€或多個列來創(chuàng)建索引,其提供了對記錄的訪問的高效排序和快速隨機(jī)查找兩者的基礎(chǔ)。存儲索引所需的磁盤空間通常小于表的存儲(由于索引通常只包含鍵字段而不包括表中的所有其他的詳細(xì)信息,其中將根據(jù)所述鍵字段組織表)。因此,索引可以在整個表可能不適合的情況下被存儲在存儲器中。數(shù)據(jù)庫表傳統(tǒng)上根據(jù)某個索引(例如,諸如雇員序列號的主鍵)被物理地組織在存儲介質(zhì)上(諸如硬盤)。在大多數(shù)情況下,數(shù)據(jù)庫表內(nèi)的行在鍵排序的基礎(chǔ)上被處理。因此,由于每次I/O操作可以將多個行帶入存儲器,以關(guān)鍵字的順序在磁盤上物理地存儲數(shù)據(jù)庫表最小化了I/O時間。結(jié)構(gòu)化查詢語言(SQL)稀疏索引是日益普及的較新的技術(shù)。稀疏索引是帶有鍵和對于表中的數(shù)據(jù)的子集指向數(shù)據(jù)庫表中的行的指針的索引。索引中的每個鍵經(jīng)由指針與數(shù)據(jù)庫表中的一行相關(guān)聯(lián)。然而,并不是表中的每一行都可以被索引中的鍵指向。應(yīng)用程序設(shè)計(jì)員已經(jīng)開始創(chuàng)建多個稀疏SQL索引來調(diào)優(yōu)特定的應(yīng)用程序查詢。對于許多高度調(diào)優(yōu)的應(yīng)用程序,數(shù)百甚至數(shù)千稀疏索引可能會被創(chuàng)建以匹配許多應(yīng)用程序查詢。目前,還無法根據(jù)多個稀疏索引以物理方式重新組織表。因此,隨著多個稀疏索引的使用在某些環(huán)境中變得更普遍,由于I/O操作的高隨機(jī)性,性能可能不是最優(yōu)的。例如,如果特定的索引選擇n行,那么當(dāng)它們被讀入存儲器時,n行可以分布在磁盤上的多達(dá)n個數(shù)據(jù)塊,引起多達(dá)n個IO。
技術(shù)實(shí)現(xiàn)要素:本文描述了用于根據(jù)多個稀疏索引重組表的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。由于重組表趨于將對應(yīng)于每個稀疏索引的行更緊密地分組在一起,因此通過該重組的表,將改善數(shù)據(jù)庫查詢的I/O性能屬性。根據(jù)一個實(shí)施例,提供了用于根據(jù)多個稀疏索引重組駐留在計(jì)算機(jī)系統(tǒng)上的數(shù)據(jù)庫表的方法。所述方法以為數(shù)據(jù)庫表中的每個行條目(即表中的指定的行)構(gòu)建位圖開始,所述位圖具有n個位位置。N個位位置中的每個對應(yīng)于多個稀疏索引中的一個的引用狀態(tài)。然后該方法基于該位圖的值排序數(shù)據(jù)庫表中的行條目。根據(jù)另一個實(shí)施例,構(gòu)建位圖的步驟進(jìn)一步包括:1)將位圖初始化為“0”;2)對于數(shù)據(jù)庫表內(nèi)的每一行,確定是否多個稀疏索引中的任何一個指向該行;以及3)如果多個稀疏索引中的任何一個指向該行,則將位圖中對應(yīng)于與該行相關(guān)聯(lián)的引用稀疏索引的位位置設(shè)置為“1”。根據(jù)一個實(shí)施例,組織位圖中的位位置,使得位圖內(nèi)的最高有效位位置被分配給多個稀疏索引內(nèi)的最流行的索引,并且位圖內(nèi)的最低有效位位置被分配給最不流行的索引。根據(jù)一個實(shí)施例,每個稀疏索引的流行度通過至少一個計(jì)數(shù)器通過監(jiān)視稀疏索引的查詢使用來確定。在另一個實(shí)施例中,每個稀疏索引的流行度通過計(jì)算和保存與稀疏索引相關(guān)聯(lián)的查詢的平均作業(yè)的優(yōu)先級來被確定,其中,最高平均作業(yè)優(yōu)先級稀疏索引是最流行的索引,并且最低平均作業(yè)優(yōu)先級索引是最不流行的索引。根據(jù)一個實(shí)施例中,組織位圖中的位位置,使得位圖內(nèi)的最高有效位位置被分配給多個稀疏索引中選擇最多的行的索引,位圖內(nèi)的最低有效位位置被分配給選擇最少的行的索引。根據(jù)一個實(shí)施例,多個稀疏索引引用數(shù)據(jù)庫表中的相同的列,而在替代的實(shí)施例中,多個稀疏索引引用數(shù)據(jù)庫表中的多個列。在一個實(shí)施例中,在基于一組預(yù)定義的標(biāo)準(zhǔn)計(jì)算位圖的值時,忽略多個稀疏索引中的一個或多個。作為示例,一組預(yù)定義的標(biāo)準(zhǔn)中的一個是稀疏索引所選擇的行的數(shù)目。根據(jù)本發(fā)明的一個實(shí)施例,本發(fā)明還提供了具有可記錄的計(jì)算機(jī)可讀存儲介質(zhì)的程序產(chǎn)品。程序代碼被存儲在計(jì)算機(jī)可讀存儲介質(zhì)中,并且被配置為在執(zhí)行時根據(jù)多個稀疏索引來重組駐留在計(jì)算機(jī)系統(tǒng)的數(shù)據(jù)庫表,包括步驟:為數(shù)據(jù)庫中的表內(nèi)的每個行條目構(gòu)建位圖,所述位圖具有n個位位置,n個位位置中的每個對應(yīng)于多個稀疏索引中的一個的引用狀態(tài);以及基于位圖的值排序數(shù)據(jù)庫表中的行條目。根據(jù)一個實(shí)施例,本發(fā)明還提供了一種系統(tǒng),該系統(tǒng)包括一個或者多個計(jì)算機(jī)處理器,以及包含程序的存儲器,所述程序在被一個或者多個處理器執(zhí)行時被配置為執(zhí)行操作。所述操作包括:為數(shù)據(jù)庫表中的每個行條目構(gòu)建位圖,所述位圖具有n個位位置,所述n個位位置中的每個對應(yīng)于多個稀疏索引中的一個的引用狀態(tài);以及基于該位圖的值排序數(shù)據(jù)庫表中的行條目。附圖說明將以示例的方式參照附圖描述本發(fā)明的實(shí)施例,其中:圖1是示出根據(jù)本發(fā)明的一個實(shí)施例的用于根據(jù)多個稀疏索引重組數(shù)據(jù)庫表的系統(tǒng)的方框圖;圖2(現(xiàn)有技術(shù))示出了用于從數(shù)據(jù)庫表創(chuàng)建稀疏索引的一組示例查詢語句;圖3(現(xiàn)有技術(shù))示出了指向被引用(referenced)表的多個稀疏索引,其中沒有稀疏索引在所引用的表中具有彼此相鄰的行;圖4示出了第一表,其中基于哪些稀疏索引引用給定的行來為每行創(chuàng)建位圖;以及第二表,其在基于與每行相關(guān)聯(lián)的位圖的數(shù)量值排序第一表的行時創(chuàng)建;以及圖5示出了指向圖4的更新的第二表的圖3的多個稀疏索引,其中在每個稀疏索引中,表中的大多數(shù)行現(xiàn)在與其它行相鄰。具體實(shí)施方式提供根據(jù)多個稀疏索引重組數(shù)據(jù)庫表的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品,其中重組后的表具有比原始表優(yōu)越的I/O性能屬性。更具體地,重組表以使得通過更緊密地將與每個引用(referencing)稀疏索引相關(guān)聯(lián)的表中的行分組在一起而最小化隨機(jī)I/O。這使得對于給定的I/O操作,與特定稀疏索引相關(guān)的表中更多的相關(guān)聯(lián)的行將被讀入到的存儲器中。圖1是示出根據(jù)本發(fā)明的一個實(shí)施例的、根據(jù)多個稀疏索引重組數(shù)據(jù)庫表的聯(lián)網(wǎng)系統(tǒng)100的方框圖。聯(lián)網(wǎng)系統(tǒng)100包括計(jì)算機(jī)102。計(jì)算機(jī)102也可以經(jīng)由網(wǎng)絡(luò)130連接到其他計(jì)算機(jī)。一般地,網(wǎng)絡(luò)130可以是通信網(wǎng)絡(luò)和/或廣域網(wǎng)(WAN)。在一個特定的實(shí)施例中,網(wǎng)絡(luò)130是因特網(wǎng)。計(jì)算機(jī)102總體包括通過總線112連接到存儲器106的處理器104、網(wǎng)絡(luò)接口設(shè)備110、存儲設(shè)備108、輸入設(shè)備114和輸出設(shè)備116。計(jì)算機(jī)102總體在操作系統(tǒng)148的控制下。操作系統(tǒng)的例子包括UNIX、MicrosoftWindows操作系統(tǒng)的各個版本、運(yùn)行在IBMPowerSystemsTM上的IBMi(以前被稱為i5/OS)集成操作環(huán)境,及Linux操作系統(tǒng)的分布。更一般地,支持此處所公開的功能的任何操作系統(tǒng)都可以被使用。包括表示單CPU、多CPU、具有多個處理內(nèi)核的單CPU等的處理器。類似地,存儲器106可以是隨機(jī)訪問存儲器。雖然存儲器106被示出為單個實(shí)體,但應(yīng)該理解,存儲器106可以包括多個模塊,并且存儲器106可以以從高速寄存器和高速緩存到較低的速度但更大的存儲器容量的DRAM芯片的多層級存在。網(wǎng)絡(luò)接口設(shè)備110可以是允許計(jì)算機(jī)102經(jīng)由網(wǎng)絡(luò)130與其它計(jì)算機(jī)進(jìn)行通信的任何類型的網(wǎng)絡(luò)通信設(shè)備存儲設(shè)備108可以是永久性的存儲設(shè)備。雖然存儲設(shè)備108被示出為單個單元,存儲設(shè)備108可以是固定和/或可移動存儲設(shè)備的組合,諸如固定磁盤驅(qū)動器、軟盤驅(qū)動器、磁帶驅(qū)動器,可移動存儲卡,或光存儲設(shè)備。存儲器106和存儲設(shè)備108可以是跨越多個初級和次級存儲設(shè)備的一個虛擬地址空間的部分。輸入設(shè)備114可以是用于提供輸入至計(jì)算機(jī)102的任何設(shè)備。例如,可以使用鍵盤、鍵區(qū)、光筆、觸摸屏、跟蹤球或語音識別單元、音頻/視頻播放器等。輸出設(shè)備116可以是用于提供輸出至計(jì)算機(jī)102的用戶的任何設(shè)備。例如,輸出設(shè)備116可以是任何傳統(tǒng)的顯示屏幕或揚(yáng)聲器組,連通它們各自的接口卡,即,視頻卡和聲卡(未示出)。雖然示出為與輸入設(shè)備114相分離,但輸出設(shè)備116和輸入設(shè)備114可以組合。例如,可以使用帶有集成的觸摸屏的顯示屏、帶有集成的鍵盤的顯示器、或結(jié)合文本語音轉(zhuǎn)換器的語音識別單元。如圖所示,計(jì)算機(jī)102的存儲器106包括操作系統(tǒng)148,數(shù)據(jù)庫管理系統(tǒng)(DBMS)150和應(yīng)用程序152。DBMS150可以管理示出在存儲設(shè)備108中的數(shù)據(jù)庫154。在一個實(shí)施例中,作為例子,DBMS150是由IBM公司為MVS、AIX、IBMi、Linux或MicrosoftWindows操作系統(tǒng)提供的DB2產(chǎn)品。一般地,本領(lǐng)域技術(shù)人員將認(rèn)識到,本發(fā)明具有向使用SQL的任何DBMS軟件的應(yīng)用,并且同樣也可以應(yīng)用于使用非-SQL查詢的數(shù)據(jù)庫軟件。然而,更一般地,應(yīng)當(dāng)理解的是,要訪問的數(shù)據(jù)根本不必是DBMS的部分。應(yīng)用程序152(并且更一般地,任何發(fā)出請求的實(shí)體,包括操作系統(tǒng)148)被配置為針對該數(shù)據(jù)庫154發(fā)出查詢。雖然為簡單起見,只示出一個數(shù)據(jù)庫,DBMS150可以管理多個數(shù)據(jù)庫。此外,數(shù)據(jù)庫可以例如通過網(wǎng)絡(luò)130相對于彼此分布。盡管該應(yīng)用程序152和DBMS150示出為在計(jì)算機(jī)102上執(zhí)行,應(yīng)用程序152也可以在經(jīng)由網(wǎng)絡(luò)130與計(jì)算機(jī)102通信的不同的計(jì)算機(jī)上執(zhí)行。在一個實(shí)施例中,數(shù)據(jù)庫154表示任何數(shù)據(jù)的集合,而不管數(shù)據(jù)的特定的物理表示是什么。數(shù)據(jù)的物理表示限定了數(shù)據(jù)的組織模式(schema)。作為示例說明,數(shù)據(jù)庫154可根據(jù)關(guān)系模式(SQL查詢可訪問的)或根據(jù)XML模式(XML查詢可訪問的)來組織。然而,本發(fā)明的實(shí)施例并不限于特定的模式,并且考慮擴(kuò)展到目前未知的模式。如此處所使用的,術(shù)語“模式”通常指數(shù)據(jù)的特定的布置。在一個實(shí)施例中,數(shù)據(jù)庫154存儲包含數(shù)據(jù)頁的數(shù)據(jù)庫表。每個數(shù)據(jù)頁被配置為存儲數(shù)據(jù)行,所述數(shù)據(jù)行轉(zhuǎn)而存儲信息。數(shù)據(jù)庫可還可以包含諸如邏輯地排序數(shù)據(jù)行的稀疏索引的數(shù)據(jù)庫索引。數(shù)據(jù)庫索引包括索引頁。每個索引頁被配置用來存儲索引條目,其中每個數(shù)據(jù)行被相應(yīng)的索引條目引用。數(shù)據(jù)頁和索引頁被布置為存儲在諸如存儲設(shè)備108的存儲介質(zhì)上或從中被檢索。在一個實(shí)施例中,應(yīng)用程序152向DBMS150發(fā)出請求。該請求包括查詢語句(例如,select(選擇)、insert(插入)或update(更新))。根據(jù)本實(shí)施例,由應(yīng)用程序152發(fā)出的請求可以是預(yù)定義的(即,硬編碼為應(yīng)用程序152的一部分),或可以響應(yīng)于輸入(例如,用戶輸入)而生成。在一個實(shí)施例中,為了服務(wù)來自應(yīng)用程序152的請求,DBMS150執(zhí)行多個數(shù)據(jù)庫操作。例如,DBMS150從存儲設(shè)備(例如,磁盤或磁帶)檢索索引條目和數(shù)據(jù)行到數(shù)據(jù)庫高速緩存(例如,在主存儲器中)。訪問存儲設(shè)備108的速度可以比服務(wù)請求所涉及的其它操作(諸如涉及數(shù)據(jù)庫高速緩存的操作)要慢得多。因此,服務(wù)請求時DBMS150的性能可以在相當(dāng)大的程度上由DBMS150訪問存儲設(shè)備108的頻率確定。在一個實(shí)施例中,DBMS150包括重組數(shù)據(jù)庫中的一個或者多個表的一個或多個例程151,使得通過更緊密地將與每個參考稀疏索引相關(guān)聯(lián)的表中的行分組在一起來最小化隨機(jī)I/O。這使得對于給定的I/O操作,與特定稀疏索引相關(guān)的表中更多的相關(guān)聯(lián)的行將被讀入到給定的存儲器。因此,服務(wù)請求時的DBMS150的性能可以被改善。在一個實(shí)施例中,數(shù)據(jù)庫中的表的重組(即排序)由系統(tǒng)管理員手動地啟動。通常,這樣的行為將被安排在諸如在周末整個系統(tǒng)的行為緩慢的時候發(fā)生。在另一個實(shí)施例中,可以定期地(每周,每月等)或根據(jù)需要執(zhí)行重組,如由相鄰程度的度量所確定。例如,DBMS可以具有測量由每個稀疏矩陣引用的行的相鄰程度的應(yīng)用程序。例如,如果定期地運(yùn)行測量應(yīng)用程序,并顯示對于每個稀疏索引,行并不很相鄰(即,成碎片)(即,相鄰程度的度量超過了預(yù)定義的閾值),那么測量應(yīng)用程序可以推薦系統(tǒng)管理員執(zhí)行重組,或者,可替換的通過重組應(yīng)用程序自動地重組表。圖2(現(xiàn)有技術(shù))示出了從數(shù)據(jù)庫表創(chuàng)建稀疏索引的一組示例的查詢語句,如200總體示出。在圖示的實(shí)施例中,通過對表210使用SQL選擇謂詞,使用四個SQLCREATEINDEX語句202、204、206和208來創(chuàng)建一組四個稀疏索引214、216、218和220在第一個示例的SQLCREATEINDEX語句202中,從表“MYTABLE”210的列“ORDER#”211創(chuàng)建題為“IBMJUNE”的稀疏索引214,其中表中的字段“CUST”包含值“IBM”,且表中的字段“MONTH”包含值“June(六月)”??梢钥闯?,表“MYTABLE”210的行2滿足搜索標(biāo)準(zhǔn),且“ROW”值“2”和“ORDER#”值“N6RYAK”被寫入“IBMJUNE”稀疏索引214。稀疏索引214的第二列中的“ROW”值2作為返回表210的指針。在第二個示例的SQLCREATEINDEX語句204中,從表“MYTABLE”210的列“ORDER#”211創(chuàng)建題為“GEJULY”的稀疏索引216,其中表中的字段“CUST”包含值“GE”,且表中的字段“MONTH”包含值“JULY(七月)”。在這個示例中,表“MYTABLE”210的行1滿足搜索標(biāo)準(zhǔn),且“ROW”值“1”和“ORDER#”值“W3IOPL”被寫入“GEJULY”稀疏索引216。稀疏索引216的第二列中的“ROW”值1作為返回表210的指針。在第三個示例的SQLCREATEINDEX語句206中,從表“MYTABLE”210的列“ORDER#”211創(chuàng)建題為“LARGEORDER”的稀疏索引218,其中表中的在字段“AMOUNTDUE”超過$1,000,000的任何條目將被選擇以包括在稀疏索引“LARGEORDER”218中。在這個示例中,表“MYTABLE”210的行1和3滿足搜索標(biāo)準(zhǔn),并且ROW值“1”和“3”以及“ORDER#”值“W3IOPL”和“8G5HNK”分別被寫入“LARGEORDER”稀疏索引218。稀疏索引218的第二列中的“ROW”值1和3作為返回表210的指針。在第四個示例的SQLCREATEINDEX語句208中,從表“MYTABLE”210的列“CUST?!?12創(chuàng)建題為“MNCUST”220的稀疏索引,其中表“MYTABLE”210中的在字段“STATE”中包含值“MN”的任何條目將被選擇在包括進(jìn)稀疏索引“MNCUST”220中。在這個示例中,表“MYTABLE”210的行2和4滿足搜索標(biāo)準(zhǔn),并且ROW值“2”和“4”以及“CUST?!敝怠昂汀?5”分別被寫入“MNCUST”稀疏索引220。稀疏索引220的第二列中的“ROW”值2和4作為返回表210的指針。除了SQL之外的另一種類型的稀疏索引是選擇/省略邏輯文件。選擇/省略邏輯具有指定從完整物理文件(即,表)選擇或者省略哪些行(或記錄)的鍵和標(biāo)準(zhǔn)。特定的選擇/省略限定經(jīng)由數(shù)據(jù)描述規(guī)范(DDS)指定。選擇/省略部分與SQL稀疏索引中的WHERE子句在功能上相似。選擇/省略邏輯通常用于RPG、COBOL或者CL的傳統(tǒng)的數(shù)據(jù)庫接口。而現(xiàn)代語言傾向于使用基于SQL的數(shù)據(jù)庫接口。這兩種接口允許相似的功能,但需要不同的方法和語法指定索引的一個或多個鍵和選擇標(biāo)準(zhǔn)。除了SQL和選擇/省略邏輯文件之外,本發(fā)明中也可以使用其它類型的稀疏索引,并且仍保持在本發(fā)明的范圍和精神之內(nèi)。圖3(現(xiàn)有技術(shù))示出了指向被引用(referenced)表310的多個稀疏索引302、304、306和308,其中沒有稀疏索引指向被引用表中的彼此相鄰的行,如300中總體示出的。在示出的示例中,表的COLUMN_X312中的行是按照順序的。盡管事實(shí)如此,沒有稀疏索引302、304、306或308具有彼此相鄰的行。例如,稀疏INDEX_A302引用表310內(nèi)的行5、8和10。稀疏INDEX_B304引用表310內(nèi)的行2,4和6。稀疏INDEX_C306引用表310內(nèi)的行1,3和10。最后,稀疏INDEX_D308引用表310內(nèi)的行4、7和9。結(jié)果,當(dāng)應(yīng)用程序構(gòu)建SQL稀疏索引(諸如302、304、306和308)以匹配某些查詢時,表310內(nèi)的被引用行的非相鄰性將會導(dǎo)致造成I/O操作是隨機(jī)的而不是分塊的(blocked),從而產(chǎn)生非最佳的性能。如在400總體示出的,圖4示出了根據(jù)本發(fā)明的第一表410,其中基于哪些稀疏索引引用了給定的行來為表中的每行條目創(chuàng)建位圖415;以及基于與每行相關(guān)聯(lián)的位圖的數(shù)值以升序排列第一表中的行時創(chuàng)建的第二表420。第一表410本質(zhì)上是來自圖3的表310,添加了包含與表中的每一行相關(guān)聯(lián)的位圖信息的新的列415。如前面在圖3中示出的,表中的每一行可以與表310中的至少一個稀疏索引相關(guān)聯(lián)。在圖4中,在列415中,為每行創(chuàng)建位圖條目,其中位圖條目中的i-位位置表示第i個稀疏索引。因此,如果給定的行被稀疏索引所引用,在該位圖條目中與該稀疏索引相關(guān)聯(lián)的位出現(xiàn)“1”,否則位條目包含在初始化時分配的“0”(默認(rèn))值。在整個位圖條目被構(gòu)建后,為每個位圖條目計(jì)算十進(jìn)制表示。該十進(jìn)制表示成為表中的每一行的排序權(quán)重。因此,位圖值“0100”將被分配十進(jìn)制值“4”,并且位圖值“1010”將被分配十進(jìn)制值“10”。此值用于重新排序表中的行。第二表420示出了已被重新排序后的第一表410。注意,已經(jīng)基于第一表410列415中的位圖的十進(jìn)制值,按照升序重新排序了表。例如,稀疏索引“C”306指向第一表410的第一行(參見圖3)。結(jié)果,與第一行相關(guān)聯(lián)的位圖315是“0100”(位圖中的列以DCBA的順序被布置),具有十進(jìn)制排序權(quán)重值“4”。兩個稀疏索引(如圖3中示出的索引_B304和索引_D308)指向表410的行4。因此,位圖內(nèi)的“B”和“D”值被分配與引用稀疏索引相關(guān)聯(lián)的“1”值。由于位圖以DCBA順序布置,與該行相關(guān)聯(lián)的結(jié)果位圖值是“1010”或十進(jìn)制值“10”。注意,如果某行未被任何索引選擇,那么它將具有零排序權(quán)重并且與其他未被任何索引所選擇的行分塊在一起。在特定的排序權(quán)重內(nèi),例如,行可以通過列中的實(shí)際值排序。在所提供的示例中,所有的稀疏索引指向數(shù)據(jù)庫表內(nèi)的相同的列。在本發(fā)明的其它實(shí)施例中,稀疏索引可以指向不同的列,或者數(shù)據(jù)庫表內(nèi)的多個列,并且仍然保持在本發(fā)明的范圍之內(nèi)。在一個實(shí)施例中,在確定數(shù)據(jù)庫表的排序順序時,位圖中的最左邊的位置與最流行的(popular)索引相關(guān)聯(lián),位圖中的第二左邊的位置與第二流行的索引相關(guān)聯(lián)等。以這種方式,最流行的索引將被更緊密地分組在一起,并且,事實(shí)上,保證最左邊的位位置使它的所有行在一起。存在幾種可以用來確定最流行的稀疏索引的替代方式。例如,通過監(jiān)視不同的數(shù)據(jù)庫查詢使用哪些稀疏索引可以確定最流行的索引,然后為每個稀疏索引保持計(jì)數(shù)器來確定流行度。在另一個例子中,監(jiān)視并記錄數(shù)據(jù)庫查詢在其中運(yùn)行的作業(yè)的優(yōu)先級,從而在高優(yōu)先級作業(yè)中最常用的稀疏索引與最左邊的位圖位置相關(guān)聯(lián),而在低優(yōu)先級作業(yè)中最常用的稀疏索引與最右邊的位圖位置相關(guān)聯(lián)。這樣,最高平均作業(yè)優(yōu)先級稀疏索引是最流行的索引,并且最低平均作業(yè)優(yōu)先級稀疏索引是最不流行的索引。在一個實(shí)施例中,組織位圖內(nèi)的位位置,使得位圖內(nèi)的最高有效位位置被分配給多個稀疏索引中選擇最多的行的索引,并且位圖內(nèi)的最低有效位位置被分配給選擇最少的行的索引。在本發(fā)明的一個實(shí)施例中,當(dāng)確定排序權(quán)重時,可以不考慮(即,忽略)某些稀疏索引。例如,如果某一稀疏索引選擇了表中太多的行,則它將被忽略,這是因?yàn)樗[含地使行成塊。同樣,如果某一稀疏索引選擇太少的行,則它也可以被忽略,這是因?yàn)樗鼘⒉恍枰褂梅謮K。此外,稀疏索引可能未被頻繁使用至足以被考慮。圖5示出了指向圖4的更新的、排序的第二表420的圖3的多個稀疏索引,其中在每個稀疏索引中,表中的多數(shù)行現(xiàn)在與其他行相鄰。在該說明性的例子中,前兩個稀疏索引302和304現(xiàn)在使2/3的他們的行在排序表420中相鄰,并且后兩個稀疏索引306和308使它們的所有的行彼此相鄰。因此,當(dāng)使用稀疏索引時,隨機(jī)I/O被最小化,并且將分塊到存儲器被增強(qiáng),從而導(dǎo)致更快的整體訪問性能。在前面的段落中,參考了本發(fā)明的實(shí)施例。然而,應(yīng)該理解的是,本發(fā)明并不限于具體描述的實(shí)施例。替代地,構(gòu)思下列特征和元素的任意組合(無論是否涉及不同的實(shí)施例)實(shí)現(xiàn)和實(shí)踐本發(fā)明。此外,雖然本發(fā)明的實(shí)施例可以實(shí)現(xiàn)優(yōu)于其他可能的解決方案和/或優(yōu)于現(xiàn)有技術(shù)的優(yōu)點(diǎn),本發(fā)明并不限制是否通過給定的實(shí)施例實(shí)現(xiàn)特定的優(yōu)點(diǎn)。因此,以下的方面、特征、實(shí)施例和優(yōu)點(diǎn)僅僅是說明性的,并且不被認(rèn)為是所附權(quán)利要求的元素或限制,除非在權(quán)利要求中明確記載。同樣地,除非在權(quán)利要求中明確記載,否則引用“本發(fā)明”不應(yīng)被解釋為此處所公開的任何發(fā)明性主題的概括并且不應(yīng)被認(rèn)為是所附權(quán)利要求的元素或限制。所屬技術(shù)領(lǐng)域的技術(shù)人員知道,本發(fā)明的各個方面可以實(shí)現(xiàn)為系統(tǒng)、方法或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明的各個方面可以具體實(shí)現(xiàn)為以下形式,即:完全的硬件實(shí)施方式、完全的軟件實(shí)施方式(包括固件、駐留軟件、微代碼等),或硬件和軟件方面結(jié)合的實(shí)施方式,這里可以統(tǒng)稱為“電路”、“模塊”或“系統(tǒng)”。此外,在一些實(shí)施例中,本發(fā)明的各個方面還可以實(shí)現(xiàn)為在一個或多個計(jì)算機(jī)可讀介質(zhì)中的計(jì)算機(jī)程序產(chǎn)品的形式,該計(jì)算機(jī)可讀介質(zhì)中包含計(jì)算機(jī)可讀的程序代碼??梢圆捎靡粋€或多個計(jì)算機(jī)可讀介質(zhì)的任意組合。計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)可讀信號介質(zhì)或者計(jì)算機(jī)可讀存儲介質(zhì)。計(jì)算機(jī)可讀存儲介質(zhì)例如可以是——但不限于——電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計(jì)算機(jī)可讀存儲介質(zhì)的更具體的例子(非窮舉的列表)包括:便攜式計(jì)算機(jī)盤、硬盤、隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPROM或閃存)、便攜式緊湊盤只讀存儲器(CD-ROM)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。在本文件中,計(jì)算機(jī)可讀存儲介質(zhì)可以是任何包含或存儲程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。計(jì)算機(jī)可讀的信號介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號,其中承載了計(jì)算機(jī)可讀的程序代碼。這種傳播的數(shù)據(jù)信號可以采用多種形式,包括——但不限于——電磁信號、光信號或上述的任意合適的組合。計(jì)算機(jī)可讀的信號介質(zhì)還可以是計(jì)算機(jī)可讀存儲介質(zhì)以外的任何計(jì)算機(jī)可讀介質(zhì),該計(jì)算機(jī)可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。計(jì)算機(jī)可讀介質(zhì)上包含的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括——但不限于——無線、有線、光纜、RF等等,或者上述的任意合適的組合。可以以一種或多種程序設(shè)計(jì)語言的任意組合來編寫用于執(zhí)行本發(fā)明操作的計(jì)算機(jī)程序代碼,所述程序設(shè)計(jì)語言包括面向?qū)ο蟮某绦蛟O(shè)計(jì)語言-諸如Java、Smalltalk、C++等,還包括常規(guī)的過程式程序設(shè)計(jì)語言-諸如“C”語言或類似的程序設(shè)計(jì)語言。程序代碼可以完全地在用戶計(jì)算機(jī)上執(zhí)行、部分地在用戶計(jì)算機(jī)上執(zhí)行、作為一個獨(dú)立的軟件包執(zhí)行、部分在用戶計(jì)算機(jī)上部分在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行、或者完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在涉及遠(yuǎn)程計(jì)算機(jī)的情形中,遠(yuǎn)程計(jì)算機(jī)可以通過任意種類的網(wǎng)絡(luò)——包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)-連接到用戶計(jì)算機(jī),或者,可以連接到外部計(jì)算機(jī)(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。以上參照根據(jù)本發(fā)明實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或框圖描述了本發(fā)明。應(yīng)當(dāng)理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計(jì)算機(jī)程序指令實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可以提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機(jī)器,使得這些計(jì)算機(jī)程序指令在通過計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器執(zhí)行時,產(chǎn)生了實(shí)現(xiàn)流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的裝置。也可以把這些計(jì)算機(jī)程序指令存儲在計(jì)算機(jī)可讀介質(zhì)中,這些指令使得計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其他設(shè)備以特定方式工作,從而,存儲在計(jì)算機(jī)可讀介質(zhì)中的指令就產(chǎn)生出包括實(shí)現(xiàn)流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的指令的制造品(articleofmanufacture)。計(jì)算機(jī)程序指令還可以被加載到計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置或者其它設(shè)備,以使得在計(jì)算機(jī)、其他可編程裝置或其他設(shè)備上進(jìn)行一系列的操作步驟,以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過程,從而在計(jì)算機(jī)或其他可編程裝置上執(zhí)行的指令提供實(shí)現(xiàn)在流程圖和/或框圖的一個或多個方框中指定的功能/動作的過程。附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個或多個用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動作的專用的基于硬件的系統(tǒng)來實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。雖然前述針對本發(fā)明的實(shí)施例,但可以設(shè)計(jì)本發(fā)明的其他和進(jìn)一步的實(shí)施例而不背離其基本范圍,并且其范圍由隨后的權(quán)利要求確定。