第三卷 為表創建索引

創建了一個表以後,如果表的記錄特別的多,那麼尋找所需要的記錄將是一件很麻煩的事。怎樣才能快速的找到需要的記錄呢?為了解決這個問題可以建立索引。

對於已經建好的表,可以利用索引對其中的數據進行排序,以便加速檢索數據的速度。可以用索引快速顯示、查詢或者打印記錄。還可以選擇記錄、控製重複字段值的輸入並支持表間的關係操作。

可使用索引加速要排序記錄或搜索記錄的顯示或打印速度。索引對於數據庫內表之間創建關係的創建也很重要。

第一章 索引概述

前麵已對索引的用途作了簡介,表的索引類似於一本書的目錄。一本書的目錄列出了書的章節,以及每一章節所在的頁碼,使讀者能方便的找到每一章節所在的位置,而不必一頁頁翻閱全書直至找到所需的內容。利用索引可對表的數據進行排序,表索引是一個記錄號的列表,是包含指針的文件,它指向表的記錄,並確定了記錄的處理順序。

若要按特定的順序定位、查看或操作表中記錄,就可以使用索引,對查看和訪問的順序進行控製。也可使用索引快速顯示、查詢或者打印記錄。Visual FoxPro 6.0使用索引作為排序機製,為開發應用程序提供靈活性和更多的功能。根據應用程序的要求,可以靈活地對同一個表創建和使用不同的索引關鍵字,按不同順序處理記錄。也能根據這些索引創建自定義表間關係,以便能準確地訪問所需要的記錄。

Visual FoxPro 6.0的索引是由指針構成的文件,這些指針邏輯上按照索引關鍵字的值進行排序。索引文件和表的.DBF文件分別存儲,並且不改變表中記錄的物理順序。實際上,創建索引是創建一個由指向.DBF文件記錄的指針構成的文件。若要根據特定順序處理表記錄,可以選擇一個相應的索引。使用索引不但可以加速對表的查看和訪問,還可使用篩選索引把訪問的記錄限製在指定的數據上。為了在兩個以上的表間建立關係,也必須先對建立關係的字段建立索引。

可以為一個表建立多個索引,每一個索引代表一種處理記錄的順序,索引保存在一個複合結構索引文件中。在使用表時,該文件被打開並更新。複合結構索引文件名與相關的表同名,擴展名為.CDX。

一個表中的索引也不是越多越好,不常用的索引反而會降低程序的執行速度,所以最好不要把表的每個字段都建立索引,更好的方法是應該用其他類型的索引文件來保存不常使用的索引。

第二章 自由表的三種索引

在Visual FoxPro 6.0 中,係統為數據庫表提供了四種類型的索引:主索引、候選索引、惟一索引和普通索引,為自由表提供了三種類型的索引:候選索引、惟一索引和普通索引。可使用表設計器中的索引選項卡來建立索引,如圖3-1所示。

圖3-1 用表設計器為一個自由表建立索引

3.2.1 主索引

在Visual FoxPro 6.0 中,主索引是一個永遠不允許在指定字段和表達式中出現重複值的索引,也就是在數據庫表的永久關聯中建立參照完整性時主表和被引用表使用的索引。對於每一個表隻能建立一個主索引,隻有數據庫表才能建立主索引,自由表不能建立主索引。另外,如果將一個字段指定為建立主索引的關鍵字段,那麼當這個字段中出現重複值時,係統將會出現一個錯誤。

3.2.2 候選索引

候選索引也是在一個指定字段和表達式中不能出現重複值的索引,之所以將它命名為候選索引,主要是因為這種索引是作為一個表中主索引的候選者出現的。

對一個表而言,盡管隻允許有一個主索引,但它的候選索引卻可以有許多。而且也可以用它們在永久關聯中建立參照完整性。

數據庫表和自由表都可以有候選索引。

對於一個表,其主索引和候選索引都儲存在.CDX結構複合索引文件中,同時也存儲在數據庫的Primary 和Candidate特性中,但是它不能存儲在.CDX獨立複合索引文件和.IDX索引文件中。這主要是因為主索引和候選索引必須和表同時打開和同時關閉,而.CDX獨立複合索引文件和.IDX單項索引文件卻不能做到這一點。

3.2.3 惟一索引

在Visual FoxPro 6.0中,惟一索引無法防止重複值記錄的建立,但是,在惟一索引中,係統隻在索引文件中保存第一次出現的索引鍵值,即隻能找到同一個關鍵值第一次出現時的記錄。對於重複鍵值的其他記錄,盡管他們仍然保留在表中,但在惟一索引文件中卻沒有包括它們。惟一索引主要是為了向下兼容而提供的。

數據庫表和自由表都可以有惟一索引。

3.2.4 普通索引

普通索引是一個簡單的索引,是惟一索引、主索引和候選索引之外的另一種索引。在普通索引中,索引關鍵字段和表達式允許重複值的出現,可以用普通索引進行表中記錄的排序和搜索。正是由於普通索引文件中不排斥重複索引關鍵值的出現,因此不但適合可重複鍵值表中的定序和搜索,也適合於一對多永久關聯中"多"的一邊(子表)的索引。

普通索引主要用於邏輯排序,以便快速查詢。

在Visual FoxPro 6.0 中,隻有惟一索引和普通索引可以存放在.CDX獨立複合索引文件和.IDX單項索引文件中。

第三章 索引文件

在介紹索引文件之前,現在先介紹兩個概念:

1.索引關鍵字

索引關鍵字是用來建立索引的字段表達式。

Visual FoxPro 6.0 使用索引關鍵字來顯示和訪問表中的記錄。如果令某一字段為索引關鍵字,則在瀏覽表時,記錄則按此字段的順序排列。索引關鍵字通常是一個字段或字段表達式。雖然不提倡,但是也可以用以下各項的組合作為索引關鍵字:函數、內存變量、其他工作區中的字段、數組元素。

2.索引標識

索引標識是關鍵字的名稱。

索引標識可以自己指定,但必須以下劃線、字母或漢字開頭,而且不能超過10個字節。例如:可以建立"職工號+姓名"為索引標識,此索引標識也可寫成"職姓"。

Visual FoxPro 6.0 的索引文件有兩種:傳統的.IDX索引文件和複合索引文件.CDX文件。.IDX索引文件隻有一個索引關鍵字表達式,即隻有一個入口。複合索引文件包含了多個索引關鍵字表達式,就好像是把多個.IDX索引文件合並成為一個文件。

3.3.1 結構複合索引文件

結構複合索引文件的擴展名為.CDX,它是在表設計器中創建索引時係統自動生成的,如圖3-2所示建立的索引就是結構複合索引,而且係統會把表設計器的索引保存在該表中。

結構複合索引文件名與相關的表同名,而且隨著表的打開關閉而打開關閉。當用戶對表中的記錄進行添加、修改或刪除等操作時,係統會自動維護.CDX結構複合索引文件,使其和新的.DBF文件相匹配。因為Visual FoxPro 6.0能自動維護修改改索引文件,使用戶對表記錄的操作簡化。同時這種索引也是數據庫表之間建立永久關係的基礎,所以結構複合索引文件是Visual FoxPro 6.0的表中用的最多的一種索引結構。

圖3-2 在表設計器中建立的結構複合索引

3.3.2 獨立複合索引

獨立複合索引又叫非結構化複合索引。

獨立複合索引文件是另外建立的,它不象結構複合索引文件一樣可以在表設計器中建立。

獨立複合索引文件.CDX可以看作是多個.IDX文件的組合,實際上.IDX索引文件完全可以加到.CDX索引文件中去。獨立複合索引文件和結構複合索引文件不同的是,當用戶對表的記錄進行修改時,獨立複合索引文件不會自動打開。而且隻有當該文件打開時,係統才能對它進行維護,如果要打開獨立複合索引文件,則要用帶INDEX子句的USE命令。

3.3.3 獨立單項索引文件

獨立單項索引文件的擴展名為.IDX,其主文件名不能和相關表同名,該索引文件和獨立複合索引文件一樣,不能隨著相關表的打開而打開。

獨立單項索引文件基於單字節表達式。通常在程序中使用獨立索引作為臨時索引,在需要時再重建或重新對索引排序,以用來優化應用程序的運行性能。一個表中可以有多個.IDX獨立索引。

另外需要說明的是,建立.IDX獨立單項索引文件的主要目的是為了原來的FoxBASE+和FoxPro的索引文件格式相兼容,此時在用INDEX命令創建.IDX文件時應該省略COMPACT子句。

第四章 創建結構複合索引

利用表設計器可以方便地創建結構複合索引。步驟如下:

(1)有如圖3-3所示為一個自由表,現在為它建立一結構複合索引文件。選擇File(文件)主菜單下的Open(打開),選擇 "Stuent_score"表並單擊"確定"。

圖3-3 將創建索引的自由表