基于Visual FoxPro表之索引文件的建立与使用
2015-10-18刘湖平
刘湖平,王 欣
(石家庄机械化步兵学院,石家庄 050083)
基于Visual FoxPro表之索引文件的建立与使用
刘湖平,王欣
(石家庄机械化步兵学院,石家庄 050083)
在数据库中,数据查询与统计是最常用的操作。尤其是查询,它是更新操作的基础,只有优化了查询才能有效提高查询速度,建立索引是优化查询的基础与前提,同时也是进行多表关联与联接的依据。
Visual FoxPro;表;索引文件;建立;使用
1 索引与索引文件
在Visual FoxPro中,索引就是对表中一个字段或多个字段(或表达式)的值,重新排列表中记录顺序的一种方法。表中记录在录入时有一个先后顺序,称为物理顺序,其存储或输出时也按这个顺序进行。对该表创建某个索引并使用该索引后,在输出时就会按关键字值的大小重新排列这些记录,形成一个新的顺序,称为逻辑顺序。索引并不改变记录的物理顺序。将索引(排序方案)存放到文件中,就形成索引文件,一个索引文件可以存放一个或多个索引。索引文件逻辑结构如图1所示。一般说来,索引文件比表文件要小得多,并且在对表数据进行编辑时,索引文件会自动更新。
图1 索引文件逻辑结构
使用索引可以大大提高系统的性能。表现在:①方便对表记录进行排序,花较小的开销对表记录进行排序,并且不改变记录的物理顺序,这也是创建索引的最初目的;②它是二分查询的基础,可以大大加快数据的检索速度,这是创建索引的最主要目的;③它是多表关联和联接的依据,特别是在实现数据参照完整性方面有特别意义;④它是进行数据汇总的前提,在使用分组和排序子句进行数据统计时,同样可以显著减少查询时间。
2 索引的分类
Visual FoxPro支持的索引有多种样式,每个索引文件所包含的索引数量可分为单一索引和复合索引两类。
2.1单一索引
所谓单一索引,就是一个索引文件只包含一个索引,要对表实施多种排序时,就要创建多个索引文件,该类索引文件扩展名为.IDX,目前已基本不采用。
2.2复合索引
复合索引文件允许一个文件包含多个索引,每个索引都有一个标识,称为索引标识,代表一种排序方案。复合索引文件扩展名为.CDX。
复合索引文件又分为结构的和非结构的两种。所谓结构的,就是索引文件与表文件是一体的,非结构的就是索引文件与表文件是分开的。简单来说,若创建索引文件时,用户为该索引文件重新命名,则该索引文件为非结构的,否则为结构的(索引文件与表文件名称相同)。VisualFoxPro主要使用结构复合索引文件(复合结构索引)。针对不同需要,结构复合索引可以是以下3种类型:
(1)普通索引。允许关键字重复,仅按关键字的值对表进行排序,在建立表间关系时,可作为“一对多”关系中的“多方”。
(2)候选索引。不允许关键字重复,输入重复值时将禁止存盘。可用作主关键字,并允许在永久关系中建立参照完整性。
(3)主索引。仅用于数据库表,其作用同候选索引。
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 索引的使用
对于结构复合索引文件而言,实现索引查询仅需打开表,确定主控索引(激活)。
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