13. 表的索引
(1).索引及索引文件的概述
索引是以索引文件的形式存在的,它根據(jù)指定的索引關(guān)鍵字表達(dá)式建立的。索引文件可以看成索引關(guān)鍵字的值與記錄號(hào)之間的對(duì)照表,關(guān)鍵字可以是一個(gè)字段,也可以是幾個(gè)字段的組合。在建立索引文件時(shí),把表所有記錄的索引關(guān)鍵字表達(dá)式的值按指定順序排序,并把每個(gè)索引關(guān)鍵字表達(dá)式值與該值在表中所對(duì)應(yīng)的記錄對(duì)應(yīng)起來(lái),保存在索引文件中。
索引文件必須與原表一起使用,查詢時(shí)根據(jù)索引關(guān)鍵字表達(dá)式的值先在索引文件中找到某字段所在的記錄號(hào),然后再到表里直接定位。這樣的查找方式使順序查找和隨機(jī)查找都有較高的效率。打開(kāi)索引文件時(shí),將改變表中記錄的邏輯順序,但并不改變表中記錄的物理順序。
一個(gè)表文件可建立多個(gè)索引文件,也可同時(shí)打開(kāi)多個(gè)索引文件,但在同一時(shí)間內(nèi)只有一個(gè)索引起作用,這個(gè)索引稱為主控索引。
Visual FoxPro系統(tǒng)中支持兩種不同的索引文件類型,即單索引文件和復(fù)合索引文件。
單索引文件是根據(jù)一個(gè)索引關(guān)鍵字建立的索引文件,文件擴(kuò)展名為.IDX,它可用INDEX命令的各種形式建立。單索引文件分為標(biāo)準(zhǔn)和壓縮兩種類型。
復(fù)合索引文件是指索引文件中可以包含多個(gè)索引標(biāo)識(shí)的擴(kuò)展名為.CDX。每個(gè)索引標(biāo)識(shí)與單索引文件類似,也可以根據(jù)一個(gè)索引關(guān)鍵字表達(dá)式(或關(guān)健字)建立。每一個(gè)索引標(biāo)識(shí)均有一個(gè)特殊的標(biāo)識(shí)名(TAG)。標(biāo)識(shí)名由字母或下劃線開(kāi)頭,由字母、數(shù)字或下劃線組成,長(zhǎng)度不超過(guò)10個(gè)字符。用戶可以利用標(biāo)識(shí)名來(lái)使用標(biāo)識(shí),向復(fù)合索引文件中追加標(biāo)識(shí)。復(fù)合文件中標(biāo)識(shí)的數(shù)目,僅受內(nèi)存和磁盤空間的限制。
復(fù)合索引文件又有兩種:一種是獨(dú)立復(fù)合索引文件;另一種是結(jié)構(gòu)復(fù)合索引文件。結(jié)構(gòu)復(fù)合索引文件是由Visual FoxPro自動(dòng)命名的,與相應(yīng)的表文件同名,擴(kuò)展名為.CDX。當(dāng)Visual FoxPro打開(kāi)一個(gè)表時(shí),便自動(dòng)查找一個(gè)結(jié)構(gòu)復(fù)合索引文件,如果找到便自動(dòng)打開(kāi),該索引文件隨表文件同時(shí)打開(kāi)和同時(shí)關(guān)閉。
獨(dú)立復(fù)合索引文件不與表文件同名,擴(kuò)展名為.CDX。在打開(kāi)表時(shí)不會(huì)自動(dòng)打開(kāi)此索引文件,由命令指定打開(kāi)。
索引可分為下列四種類型:
1)主索引
主索引是一個(gè)永遠(yuǎn)不允許在指定字段和表達(dá)式中出現(xiàn)重復(fù)值的索引。它也是在數(shù)據(jù)庫(kù)表的永久關(guān)聯(lián)中創(chuàng)建參照完整性時(shí)主表和被引用表使用的索引。每一個(gè)表只能建立一個(gè)主索引,只有數(shù)據(jù)庫(kù)表才能建立主索引。
2)侯選索引
侯選索引也是一個(gè)不允許在指定字段和表達(dá)式中出現(xiàn)重復(fù)值的索引。數(shù)據(jù)庫(kù)表和自由表都可以建立侯選索引,一個(gè)表可以建立多個(gè)侯選索引。
主索引和侯選索引都存儲(chǔ)在.CDX結(jié)構(gòu)復(fù)合索引文件中,不能存儲(chǔ)在于獨(dú)立復(fù)合索引文件和單索引文件中,因?yàn)橹魉饕秃钸x索引都必須與表文件同時(shí)打開(kāi)和同時(shí)關(guān)閉。
3)唯一索引
系統(tǒng)只在索引文件中保留第一次出現(xiàn)的索引關(guān)鍵字值。數(shù)據(jù)庫(kù)表和自由表都可以建立唯一索引
4)普通索引
是一個(gè)最簡(jiǎn)單的索引,允許關(guān)鍵字值的重復(fù)出現(xiàn),適合用來(lái)進(jìn)行表中記錄的排序和查詢,也適合于一對(duì)多永久關(guān)聯(lián)中“多”的一邊(子表)的索引。數(shù)據(jù)庫(kù)表和自由表都可以建立普通索引。普通索引和唯一索引可以存儲(chǔ)在.CDX獨(dú)立復(fù)合索引文件和.IDX單索引文件中。
(2).索引文件的建立
1)命令方式
【格式】INDEX ON <索引關(guān)鍵字表達(dá)式> TO <單索引文件> | TAG <標(biāo)識(shí)名> [OF <獨(dú)立復(fù)合索引文件名>]
[FOR <邏輯表達(dá)式>] [COMPACT]
[ASCENDING | DESCENDING][UNIQUE] [ADDITIVE]
(p99)
【功能】對(duì)當(dāng)前表文件按指定的關(guān)鍵字建立索引文件。
【說(shuō)明】<索引關(guān)鍵字表達(dá)式>:指定建立索引文件的關(guān)鍵字表達(dá)式,可以是單一字段名,也可以是多個(gè)字段組成的字符型表達(dá)式,表達(dá)式中各字段的類型只能是數(shù)值型、字符型和日期型和邏輯型。當(dāng)表達(dá)式是單個(gè)字段名時(shí),字段類型不用轉(zhuǎn)換;應(yīng)轉(zhuǎn)換成同一類型的表達(dá)式。
TAG <標(biāo)識(shí)名>:此選項(xiàng)只對(duì)建立復(fù)合索引文件時(shí)有效,指定建立或追加索引標(biāo)識(shí)的標(biāo)識(shí)名。
OF <獨(dú)立復(fù)合索引文件>:指定獨(dú)立復(fù)合索引文件名。若有此選項(xiàng),表示在指定的獨(dú)立復(fù)合索引文件中追加一個(gè)索引標(biāo)識(shí),若指定的獨(dú)立復(fù)合索引文件不存在,系統(tǒng)將自動(dòng)建立指定的文件。若沒(méi)有此選項(xiàng),表示在結(jié)構(gòu)復(fù)合文件中追加一個(gè)索引標(biāo)識(shí),若結(jié)構(gòu)復(fù)合索引文件不存在,系統(tǒng)將自動(dòng)建立結(jié)構(gòu)復(fù)合索引文件。
FOR <邏輯表達(dá)式>:表示只對(duì)滿足條件的記錄建立索引。
COMPACT:此選項(xiàng)只對(duì)單索引文件有效,表示建立壓縮索引文件。
ASCENDING|DESCENDING: ASCENDING 表示按升序建立索引,DESCENDING 表示按降序建立索引。缺省時(shí),按按升序建立索引。單索引文件不能選用DESCENDING 選項(xiàng)。UNIQUE:表示建立的是唯一索引。
ADDITIVE:表示保留以前打開(kāi)的索引文件。否則,除結(jié)構(gòu)復(fù)合索引文件外,以前打開(kāi)的其他索引文件都將被關(guān)閉。
新建的索引文件自動(dòng)打開(kāi),并開(kāi)始起作用。
【例1】對(duì)STUD.DBF 表文件建立出生日期單索引文件STUD.IDX。
USE STUD
INDEX ON 出生日期 TO STUD
【例2】對(duì)表文件STUD.DBF,建立一個(gè)基于出生日期字段的結(jié)構(gòu)復(fù)合索引文件。
USE STUD
INDEX ON 出生日期 TAG 出生日期 DESCENDING
【例3】在表文件STUD.DBF的結(jié)構(gòu)復(fù)合索引文件中,按學(xué)號(hào) 追加一個(gè)標(biāo)識(shí)。
USE STUD
INDEX ON 學(xué)號(hào) TAG 學(xué)號(hào)
【例4】在表文件STUD.DBF的結(jié)構(gòu)復(fù)合索引文件中,先按性別再按學(xué)號(hào)追加一個(gè)標(biāo)識(shí)XBXH。
USE STUD
INDEX ON 性別+學(xué)號(hào) TAG XBXH
【例5】在表文件STUD.DBF中,先按性別再按是否團(tuán)員建立一個(gè)獨(dú)立復(fù)合索引文
件SXBTY.CDX。
USE STUD
INDEX ON 性別+IIF(是否團(tuán)員,’團(tuán)員’,’非團(tuán)員’) TAG 性別團(tuán)員 OF SXBTY
2)菜單方式
、 打開(kāi)表文件。
、 選擇【顯示】|【表設(shè)計(jì)器】命令,打開(kāi)表設(shè)計(jì)器對(duì)話框,選擇“索引”標(biāo)簽。
、 在索引名中輸入索引標(biāo)識(shí)名,在類型的下拉列表框中確定一種索引類型,在表達(dá)式中輸入索引關(guān)鍵字表達(dá)式,在篩選中輸入確定參加索引的記錄條件,在排序序列下默認(rèn)的是升序按鈕,單擊可改變?yōu)榻敌虬粹o。
、 確定好各項(xiàng)后,選擇“確定”,關(guān)閉表設(shè)計(jì)器,同時(shí)索引建立完成。
、 同樣的方法也可以將以前建立的索引調(diào)出,利用表設(shè)計(jì)器上的“插入”或“刪除”按鈕進(jìn)行插入或刪除。
注意:用表設(shè)計(jì)器建立的索引都是結(jié)構(gòu)復(fù)合索引文件。
(3).索引文件的打開(kāi)
【格式1】USE <文件名> [INDEX <索引文件名表|?>][ORDER <數(shù)值表達(dá)式2> | <單索引文件> | [TAG] <標(biāo)識(shí)名> [OF <復(fù)合索引文件名>][ASCENDING | DESCENDING]]
【功能】打開(kāi)指定的表文件及相關(guān)的索引文件
【說(shuō)明】:
INDEX <索引文件名表> | ?:表示打開(kāi)的索引文件;如果選擇“?”,則系統(tǒng)將出現(xiàn)“打開(kāi)”對(duì)話框,供用戶選擇索引文件名;如果<索引文件名表>中的第一個(gè)索引文件是單索引文件,則它是主索引文件,若第一個(gè)索引文件是復(fù)合索引文件,則表文件的記錄將以物理順序被訪問(wèn)。
<索引文件名表>:指定要打開(kāi)的索引文件,索引文件中的文件擴(kuò)展名可以省略,但如果存在同名的單索引文件和復(fù)合索引文件,必須帶擴(kuò)展名。
<索引文件名表>中的單索引文件和復(fù)合索引文件的標(biāo)識(shí)有一個(gè)唯一的編號(hào),編號(hào)最小值為1,編號(hào)規(guī)則為:先將單索引文件按它們?cè)?索引文件名表>中的順序編號(hào),再將結(jié)構(gòu)復(fù)合索引文件按標(biāo)識(shí)產(chǎn)生的順序連續(xù)編號(hào),最后將獨(dú)立復(fù)合索引文件中的標(biāo)識(shí)先按它在<索引文件名表>中的順序,再按標(biāo)識(shí)產(chǎn)生的順序連續(xù)編號(hào)。
[ORDER]子句:指定主索引。選擇此選項(xiàng)時(shí),主索引文件將不是<索引文件名表>中的第一個(gè)單索引文件,而是此選項(xiàng)指定的單索引文件或標(biāo)識(shí)。[ORDER]子句中各選項(xiàng)的含義如下:
..<數(shù)值表達(dá)式2>指定主索引的編號(hào),若<數(shù)值表達(dá)式2>的值為0,表示不設(shè)主索引。
..<單索引文件>指定的單索引文件設(shè)置為主索引。
.. [TAG] <標(biāo)識(shí)名> [OF <復(fù)合索引文件名>]:表示將<復(fù)合索引文件名>中的指定標(biāo)識(shí)作為主索引。[OF <復(fù)合索引文件名>]缺省表示為結(jié)構(gòu)復(fù)合索引文件。
ASCENDING | DESCENDING:表示主索引被強(qiáng)制以升序或降序索引;缺省此選項(xiàng),主索引按原有順序打開(kāi)。
【格式2】SET INDEX TO [<索引文件名表> ] [ORDER <數(shù)值表達(dá)式> | <單索引文件名> | [TAG] <標(biāo)識(shí)名> [OF <復(fù)合索引文件名>] [ASCENDING | DESCENDING]][ADDITIVE]
【功能】在已打開(kāi)表文件的前提下, 打開(kāi)相關(guān)索引文件。
【說(shuō)明】ADDITIVE:表示保留以前打開(kāi)的索引文件。否則,除結(jié)構(gòu)復(fù)合索引文件外,以前打開(kāi)的其他索引文件都將被關(guān)閉。
(4).索引文件的關(guān)閉
【格式1】USE
【功能】關(guān)閉當(dāng)前工作區(qū)中打開(kāi)的表文件及所有索引文件。
【格式2】SET INDEX TO
【功能】關(guān)閉當(dāng)前工作區(qū)中打開(kāi)的所有單索引文件和獨(dú)立復(fù)合索引文件。
【格式3】CLOSE INDEXS
【功能】關(guān)閉當(dāng)前工作區(qū)中打開(kāi)的所有單索引文件和獨(dú)立復(fù)合索引文件。
注意:結(jié)構(gòu)復(fù)合索引文件不能用以上命令關(guān)閉,它隨表文件的打開(kāi)而打開(kāi),隨表文件的關(guān)閉而關(guān)閉。
(5).索引的刪除
1)標(biāo)識(shí)的刪除
【格式】DELETE TAG <標(biāo)識(shí)名1> [OF <復(fù)合索引文件名1>][, <標(biāo)識(shí)名2>
[OF <復(fù)合索引文件名2>]] ...
或:DELETE TAG ALL [OF <復(fù)合索引文件名>]
【功能】從指定的復(fù)合文件中刪除標(biāo)識(shí)
【說(shuō)明】OF <復(fù)合索引文件名>:指定復(fù)合索引文件名,若缺省,則為結(jié)構(gòu)復(fù)合索引文件。
2)單索引文件的刪除
【格式】DELETE FILE <單索引文件名>
【功能】刪除指定的單索引文件
【說(shuō)明】關(guān)閉的索引文件才能被刪除,文件名必須帶擴(kuò)展名。
【例】刪除表文件STUD.DBF 的單索引文件STUD.IDX 及結(jié)構(gòu)復(fù)合
索引文件中的所有標(biāo)識(shí)。 DELETE FILE STUD.IDX
USE STUD
DELETE TAG ALL
![]() | ![]() .. 定價(jià):¥133 優(yōu)惠價(jià):¥133.0 更多書籍 |
![]() | ![]() .. 定價(jià):¥124 優(yōu)惠價(jià):¥124.0 更多書籍 |