劉湖平,王 欣
(石家莊機械化步兵學院,石家莊 050083)
基于Visual FoxPro表之索引文件的建立與使用
劉湖平,王欣
(石家莊機械化步兵學院,石家莊 050083)
在數據庫中,數據查詢與統計是最常用的操作。尤其是查詢,它是更新操作的基礎,只有優化了查詢才能有效提高查詢速度,建立索引是優化查詢的基礎與前提,同時也是進行多表關聯與聯接的依據。
Visual FoxPro;表;索引文件;建立;使用
在Visual FoxPro中,索引就是對表中一個字段或多個字段(或表達式)的值,重新排列表中記錄順序的一種方法。表中記錄在錄入時有一個先后順序,稱為物理順序,其存儲或輸出時也按這個順序進行。對該表創建某個索引并使用該索引后,在輸出時就會按關鍵字值的大小重新排列這些記錄,形成一個新的順序,稱為邏輯順序。索引并不改變記錄的物理順序。將索引(排序方案)存放到文件中,就形成索引文件,一個索引文件可以存放一個或多個索引。索引文件邏輯結構如圖1所示。一般說來,索引文件比表文件要小得多,并且在對表數據進行編輯時,索引文件會自動更新。

圖1 索引文件邏輯結構
使用索引可以大大提高系統的性能。表現在:①方便對表記錄進行排序,花較小的開銷對表記錄進行排序,并且不改變記錄的物理順序,這也是創建索引的最初目的;②它是二分查詢的基礎,可以大大加快數據的檢索速度,這是創建索引的最主要目的;③它是多表關聯和聯接的依據,特別是在實現數據參照完整性方面有特別意義;④它是進行數據匯總的前提,在使用分組和排序子句進行數據統計時,同樣可以顯著減少查詢時間。
Visual FoxPro支持的索引有多種樣式,每個索引文件所包含的索引數量可分為單一索引和復合索引兩類。
2.1單一索引
所謂單一索引,就是一個索引文件只包含一個索引,要對表實施多種排序時,就要創建多個索引文件,該類索引文件擴展名為.IDX,目前已基本不采用。
2.2復合索引
復合索引文件允許一個文件包含多個索引,每個索引都有一個標識,稱為索引標識,代表一種排序方案。復合索引文件擴展名為.CDX。
復合索引文件又分為結構的和非結構的兩種。所謂結構的,就是索引文件與表文件是一體的,非結構的就是索引文件與表文件是分開的。簡單來說,若創建索引文件時,用戶為該索引文件重新命名,則該索引文件為非結構的,否則為結構的(索引文件與表文件名稱相同)。VisualFoxPro主要使用結構復合索引文件(復合結構索引)。針對不同需要,結構復合索引可以是以下3種類型:
(1)普通索引。允許關鍵字重復,僅按關鍵字的值對表進行排序,在建立表間關系時,可作為“一對多”關系中的“多方”。
(2)候選索引。不允許關鍵字重復,輸入重復值時將禁止存盤。可用作主關鍵字,并允許在永久關系中建立參照完整性。
(3)主索引。僅用于數據庫表,其作用同候選索引。
索引的創建方法有兩種:①在Visual FoxPro環境下,可以通過界面操作的方式直接在表設計器中建立索引;②通過命令來創建,這也是最本質的方法,因為通過命令可以進行編程。下文皆以命令的方式進行介紹。
命令格式:
INDEXON<索引關鍵字>TAG<索引標識>[FOR<條件>][ASCENDING|DESCENDING][CANDIDATE][ADDITIVE]
命令功能:創建結構復合索引文件及索引標識。
說明:
(1)本命令是為當前工作區中打開的表創建索引文件。
(2)<索引關鍵字>表示要建立索引的字段、字段組合或字段表達式;<索引標識>即為該索引定義的一個標識(符合變量的命名規則,一般不用漢字)。
(3)<條件>是對表進行篩選,只有對符合條件的記錄才進行索引。該項為可選,缺省為所有記錄。
(4)[ASCENDING|DESCENDING]表示索引后記錄的邏輯順序,ASCENDING表示升序、DESCENDING表示降序。該項為可選,缺省為升序。
(5)[CANDIDATE]表示候選索引,該項為可選,缺省為普通索引。
(6)[ADDITIVE]表示建立本索引文件時,并不關閉之前打開的索引文件。該項為可選,缺省為關閉。
舉例:若工廠管理設備表為SB(編號、名稱、啟用日期、價格、部門、主要設備、備注、商標)
USESB&&打開表SB
INDEXON價格TAG jg DESCENDING
&&為表SB創建結構復合索引文件SB.CDX,關鍵字:價格,jg為索引標識;普通索引,降序。
INDEXON部門+STR(價格,9,2)TAGbmjg
&&關鍵字表達式:部門+STR(價格,9,2),索引標識bmjg,普通索引,該索引寫入SB.CDX文件,該索引按部門升序,部門相同時按價格升序排列。
INDEXONVAL(部門)-價格*100 TAGbmjg1CADIDATE
&&關鍵字表達式:VAL(部門)-價格*100,索引標識bmjg1,候選索引,該索引寫入SB.CDX文件,該索引按部門升序,部門相同時按價格降序排列。
對于結構復合索引文件而言,實現索引查詢僅需打開表,確定主控索引(激活)。
4.1激活
復合索引文件中,當前建立的索引標識自動成為主控索引(即最后創建的索引標識),但在重新打開表時,盡管索引文件也自動打開,但還必須確定主控索引,即對索引進行激活。
命令格式:
SETORDER TO[<數值表達式>]|[<索引標識>]
命令功能:激活索引(確定主控索引),即打開的表按此進行排序。
說明:
(1)<數值表達式>表示索引序號,用整數表示,它是創建索引時的序號,即依據創建索引的先后,系統自動為每個索引編排一個序號。上述創建的3個索引標識的序號分別為1、2、3,即1指的是jg,3指的是bmjg1。
(2)<索引標識>指具體的索引標識,如上例中的jg、bm jg。
(3)命令中不帶參數或參數為0時,即SETORDER TO或SETORDER TO 0,表示取消主控,表中記錄將按物理順序排列。
4.2更新
確定了主控索引后,結構復合索引文件能進行自動更新,即隨著表中數據的改變,索引文件自動進行更新。
若未確定主控索引,修改表中的記錄時,索引文件就不會自動更新。如果要維持記錄的邏輯順序,則要用命令REINDEX對索引文件進行重建。
4.3刪除
如果不需要索引了,可對其進行刪除,刪除分為對索引文件的刪除和刪除索引文件中的索引標識兩種。
(1)刪除索引文件
命令格式:
ERASE|DELETE<索引文件名>
說明:刪除索引文件可用ERASE命令,也可用DELETE命令。
(2)刪除索引標識
命令格式:
DELETETAGALL|<索引標識1>[,<索引標識2>]……
說明:ALL子句用于刪除所有索引標識,若索引文件的所有索引標識都被刪除,則該索引文件自動刪除。間接地,亦可用此命令來刪除索引文件。
主要參考文獻
[1]史濟民.Visual FoxPro及其應用系統開發[M].北京:清華大學出版社,2011.
[2]劉升,曹紅蘋.數據庫系統原理與應用[M].北京:清華大學出版社,2012.
10.3969/j.issn.1673-0194.2015.11.111
TP392
A
1673-0194(2015)11-0193-02
2015-04-03