7.1 排序与索引
目的与要求: 通过本次课的学习,掌握数据表排序和索引操作。 | ||
教学内容与时间安排、教学方法:
教学安排: 表的排序、索引的建立 40分钟 索引的使用 40分钟 教学方法: CAI、图形、表格 | ||
教学重点及如何突出重点、难点及如何突破难点: 教学重点: 表排序、索引 教学难点: 表的索引 | ||
基本内容 |
教学 |
课堂设计 |
5.1 排序 排序就是依据打开的表文件(称原表)中的某些字段值升序或降序重新排列记录,排序后将产生一个新表,其记录按排序字段值的大小(升序/降序)新排列的顺序排列,但原表记录的排列顺序不变。 说明: ①排序操作:有升序和降序两种排序方式。升序是指表中记录按照关键字(排序字段)的值由小到大的顺序排列,降序则是按照关键字的值由大到小的顺序排列。 ②SORT排序的缺点:排序速度慢(因需按关键字值进行记录大调整);占存储空间大(因排序时,排序表和系统排序所需临时工作文件需足够大的磁盘空间,一般为3倍原库文件的大小)。 【格式】SORT TO <新文件> ON <字段名1> [/A|/D][/C] [,<字段名2> [/A|/D][/C]…][<范围>][FOR <条件表达式1>][WHILE <条件表达式2>][FIELDS <字段名表>|FIELDS LIKE <通配字段名1>|FIELDS EXCEPT <通配字段名2>] 【功能】根据排序字段的值产生一个新的排序表文件,该表文件的扩展名仍为.dbf。 【说明】 ①<新文件>:必选项,它是排序后生成的新表文件名。 ②ON子句中的字段名是排序字段,记录将随字段值的递增或递减来排序,把排序字段称排序关键字。 ③选项/A和选项/D分别用来指定是升序还是降序,默认/A升序排序。选项/C表示不区分字段值中字母的大小写。排序字段不能是备注型和通用型字段。 ④在ON子句中可以使用多个字段名,排序时,先按主排序字段<字段名1>(称主关键字)排序,主关键字相同时,再按第二个排序字段排序…。 ⑤省略范围和条件等子句表示所有记录排序。 ⑥FIELDS子句用来指定新表中包含的字段,省略时新表中包含原表中的所有字段。 【例】对STUDENT.DBF表按以下要求进行排序: 将STUDENT.DBF表按年龄降序排序,年龄相同时则按学号升序排序。只选择男生记录,排序后产生表为stud1.dbf,并要求新表只包含字段:学号,姓名,性别,年龄。 USE student SORT TO stud1 ON 年龄/D,学号 FIELDS 学号,姓名,性别,年龄 FOR 性别="男" USE stu1 LIST
5.2 索引 一、索引的概念 1.基本概念 执行排序操作后产生的新表文件中会形成新的物理顺序记录,但并不改变原表文件中记录的排列顺序。索引则不同,索引操作则是根据关键字的值按升序或降序排列,每个值对应源文件中的一个记录号,这样确定了记录的逻辑排序,而不改变记录的物理顺序。索引操作据使用的选项不同,可建立单索引和复合索引文件,单索引文件仅由关键字和与关键字的值相对应的记录号两个字段构成。即每个值对应原表的一个记录号,这样就确定了记录的逻辑顺序。 排序与索引的区别: ①排序:产生的表文件的扩展名为.dbf,记录的输出顺序是物理顺序(重新排列的),原表中记录的排列顺序并不发生改变,但新排序表中的记录与原表中的记录已不在一一对应。 ②索引:产生的文件扩展名为.idx(单索引)或.cdx(复合索引),文件只包含索引关键字的值和与其对应的记录号,记录的输出是逻辑排序的,原表中记录的排列顺序并不发生改变,但产生的索引文件中的每个记录值对应原表中的一个记录号 2.索引的分类 VFP支持建立的索引文件可从以下两方面来分类: ⑴按索引文件的类型分(2类) 单索引文件:其扩展名为.IDX,索引文件只包含一个索引关键字表达式,主要是为了与FoxBase以及以前的版本兼容而存在的。 复合索引文件:其扩展名为.CDX,该类索引文件中可以包含多个索引关键字表达式,这些索引关键字表达式称为索引标记。每个索引标记代表了记录的一种逻辑顺序,复合索引文件实际是多个单索引文件的集合。 复合索引文件的分类(分为两类):一类是结构化复合索引文件,另一种是独立复合索引文件。 ⑵按索引的功能分 ①索引文件的主要功能是对数据表中的内容进行逻辑排序,以提高查询速度。此外,使用索引文件还能控制是否允许相同的索引关键字值在不同记录中重复出现。 ②按照功能分类可以将索引分为四种类型:主索引、候选索引、唯一索引和普通索引,自由表只能使用后面三种类型。 二、索引的建立 1.创建单索引文件 【格式】INDEX ON <索引关键字> TO <单索引文件名> [FOR <条件表达式>][COMPACT][UNIQUE][ADDITIVE] 【功能】建立扩展名为.IDX的单索引文件。 【说明】 ①使用INDEX命令每次只能建立一个索引文件。但可多次使用INDEX命令依据打开的一个表中不同的字段建立多个单索引文件。 ②索引关键字:是进行排序的字段——称索引关键字段,它可以是单关键字或索引表达式,memo和gen字段不能参加索引。 【例4.3-2】打开student,dbf表,以姓名为关键字段,建立索引文件xm.idx,要求保存到d:\myvfp文件夹下。 SET DEFAULT TO D:\MYVFP USE student INDEX ON 姓名 TO xm &&建立了一个按升序排列的普通索引型的单索引文件. list &&显示结果如下: 2.创建复合索引文件 1)利用命令建立复合索引 【格式】INDEX ON <索引关键字> TAG <索引标识名>[OF <复合索引文件名>][FOR <条件表达式>][ASCENDING|DESCENDING][UNIQUE|CANDIDATE][ADDITIVE] 【功能】建立复合索引文件。 【说明】 ①ASCENDING|DESCENDING:用来指定某一索引表达式为升序还是降序,省略此两项时为升序。注:单索引不能使用这两个选项。 ②使用OF <复合索引文件名>子句:表示建立独立复合索引,省略该子句时建立的为结构化复合索引。 ③使用UNIQUE子句:表示建立唯一索引。如果多条记录具有相同的关键字段值,索引时只取其中的第一条记录;不选此项,索引时包括所有记录。 ④CANDIDATE子句:选,表示创建候选索引。 【例4.3-6】为表student.dbf建立结构复合索引文件。索引关键字为姓名,用xm作为普通索引标识(TAG标记),建立复合索引文件student.cdx use student index on 姓名 tag xm list && 显示结果
-----------本节课结束-----------
三、索引的使用 建立索引的目的,就是为了实现快速查询.索引文件必须和表一起使用才有意义,因此在利用索引进行查询时,需要打开表和索引文件。 1.单索引文件的使用 【格式1】USE <表文件名> INDEX <索引文件名表> 【格式2】SET INDEX TO <索引文件名表>[ADDITIVE] 【说明】 格式1:在打开表的同时打开索引文件。 格式2:打开表后,再打开索引文件。 可同时打开多个单索引文件,文件名之间用逗号分隔,排在最左边的(第一个)索引文件为主控索引文件。 ①ADDITIVE选项:省略,在打开索引文件时,会关闭其前打开的单索引文件和独立复合索引文件。 ②使用SET INDEX TO或CLOSE INDEX命令将关闭单索引文件和独立复合索引文件。 ③关闭表文件时,将同时关闭所有索引文件(包括结构复合索引文件)。 ④当打开表和索引文件时,使用INSERT命令不管在表的什么位置插入记录,都被追加在数据库的尾部 【例】单索引文件使用方法示例。 use student set index to xm,xn && 打开索引文件xm和xn,xm被设置为主索引。 List && 显示xm.idx主控索引文件记录的逻辑排序结果.演示见书例4-12。 2.结构化复合索引的使用 打开表,与表主文件名同名,扩展名为,cdx的结构化复合索引文件会自动打开直到关闭表文件为止。在没有指定主控索引标记之前,对表的访问仍然按照原来的物理顺序。如果想按照某个索引标记的顺序访问表,还需要为表指定主控索引标记。 【格式1】USE <表文件名> ORDER [TAG] <索引标记名> [ASCENDING|DESCENDING] 【格式2】SET ORDER TO [[TAG] <索引标记名>] [ASCENDING|DESCENDING] 【功能】为表指定结构化复合索引文件的主控索引标记。 【说明】 格式1:在打开数据表的同时指定主控索引标识,其中TAG项可选可不选。 格式2:是在打开了数据表之后,指定主控索引标识。 [ASCENDING|DESCENDING]:重新指定索引关键字表达式值的排列顺序(升序或降序)。 使用set order to命令可以取消主控索引。 【例】结构化复合索引用法示例。 set default to d:\myvfp USE student ORDER xm DESC &&打开表时,结构化索引文件同时打开,指定该索引中的索引标识xm为主控索引标识。 List && 按姓名降序显示 3.独立复合索引的使用 打开表后,独立复合索引文件不随之打开,因此,使用独立复合索引文件必需打开它,然后再指定主控索引标记。 【格式1】USE <表文件名> INDEX <独立复合索引文件名> ORDER [TAG] <索引标记名> [OF <独立复合索引文件名>][ASCENDING|DESCENDING] 【格式2】SET INDEX TO <独立复合索引文件名> ORDER [TAG] <索引标记名>[[OF <独立复合索引文件名>] 【说明】 格式1:打开表文件的同时,打开独立复合索引文件并且指定主控索引标记。 格式2:打开了表文件之后,再打开独立复合索引文件并且指定主控索引标记。 【例】独立复合索引使用示例 set default to d:\myvfp USE student SET INDEX TO xhgg order tag xh_nl OF xhgg list &&显示xhgg.cdx独立复合索引文件中索引标记为xh_nl子索引文件的内容。 四、重新索引 当对表进行记录插入、修改和删除操作时,打开的索引文件会随之操作(自动更新)。但没有打开的索引文件,不会随之操作(自动更新),可利用重新索引功能对没有打开的索引文件进行重新索引,即将表中进行的插入、修改和删除记录重新在索引文件中进行逻辑排序。 【格式】REINDEX [COMPACT] 【说明】 ①进行重新索引前,应先打开表和相应的要重新索引的索引文件,再执行REINDEX [COMPACT]命令。 ②COMPACT子句:选表示将索引文件进行压缩处理.
当有些索引文件没用时,可以从磁盘上将其删掉,这样可提高系统的运行性能,释放磁盘空间。 1.删除单索引文件 【格式】delete file <单索引文件名> 【功能】删除指定的单索引文件 【说明】索引文件关闭后,才能进行删除操作。 【例4.3-13】下面给出删除单索引文件的示例。 set index to && 关闭单索引文件 delete file xm.idx && 删除索引文件xm.idx 2.删除索引标识 【格式1】delete tag all 【功能】删除复合索引文件中的所有索引标记。 【格式2】delete tag <索引标记1>[,<索引标记2>]… 【功能】删除复合索引文件中被指定的索引标记。 【说明】 ①使用【格式1】时,将删除复合索引文件中的所有索引标记。意味着该复合索引文件被删除。 ②使用【格式2】时,将删除复合索引文件中被指定的索引标记。 ③使用表设计器也可删除结构化复合索引文件。 【例】删除复合索引文件中的索引标记示例。 use student && 打开student.dbf,同时打开复合 索引文件student.cdx delete tag xh,nl && 删除xh和nl两个索引标记。 delete tag all && 将student.cdx结构索引文件中全部索引标记删除,这表删除了student.cdc结构索引文件.
|
讲述
|
排序15分钟
索引基本概念10分钟
创建单索引文件10分钟
创建复合索引文件20分钟
单索引文件的使用8分钟
结构化复合索引文件的使用5分钟
独立复合索引文件的使用5分钟
重新索引5分钟
删除单索引文件3分钟
删除索引标识5分钟
|