13.表的索引
  (1)索引及索引文件的概述
  索引是以索引文件的形式存在的,它根据指定的索引关键字表达式建立的。索引文件可以看成索引关键字的值与记录号之间的对照表,关键字可以是一个字段,也可以是几个字段的组合。在建立索引文件时,把表所有记录的索引关键字表达式的值按指定顺序排序,并把每个索引关键字表达式值与该值在表中所对应的记录对应起来,保存在索引文件中。
  索引文件必须与原表一起使用,查询时根据索引关键字表达式的值先在索引文件中到某字段所在的记录号,然后再到表里直接定位。这样的查方式使顺序查和随机查都有较高的效率。打开索引文件时,将改变表中记录的逻辑顺序,但并不改变表中记录的物理顺序。
  一个表文件可建立多个索引文件,也可同时打开多个索引文件,但在同一时间内只有一个索引起作用,这个索引称为主控索引。
  Visual FoxPro系统中支持两种不同的索引文件类型,即单索引文件和复合索引文件。
  单索引文件是根据一个索引关键字建立的索引文件,文件扩展名为.IDX,它可用INDEX命令的各种形式建立。单索引文件分为标准和压缩两种类型。
  复合索引文件是指索引文件中可以包含多个索引标识的扩展名为.CDX。每个索引标识与单索
引文件类似,也可以根据一个索引关键字表达式(或关健字)建立。每一个索引标识均有一个特殊的标识名(TAG)。标识名由字母或下划线开头,由字母、数字或下划线组成,长度不超过10个字符。用户可以利用标识名来使用标识,向复合索引文件中追加标识。复合文件中标识的数目,仅受内存和磁盘空间的限制。
  复合索引文件又有两种:一种是独立复合索引文件;另一种是结构复合索引文件。
  结构复合索引文件是由Visual FoxPro自动命名的,与相应的表文件同名,扩展名为.CDX。当Visual FoxPro打开一个表时,便自动查一个结构复合索引文件,如果到便自动打开,该索引文件随表文件同时打开和同时关闭。
  独立复合索引文件不与表文件同名,扩展名为.CDX。在打开表时不会自动打开此索引文件,由命令指定打开。
  索引可分为下列四种类型:
  1)主索引
  主索引是一个永远不允许在指定字段和表达式中出现重复值的索引。它也是在数据库表的永久关联中创建参照完整性时主表和被引用表使用的索引。每一个表只能建立一个主索引,只有数据库表才能建立主索引。
  2)侯选索引侯选索引也是一个不允许在指定字段和表达式中出现重复值的索引。数据库表和自由表都可以建立侯选索引,一个表可以建立多个侯选索引。
  主索引和侯选索引都存储.CDX结构复合索引文件中,不能存储在于独立复合索引文件和单索引文件中,因为主索引和侯选索引都必须与表文件同时打开和同时关闭。
  3)唯一索引系统只在索引文件中保留第一次出现的索引关键字值。数据库表和自由表都可以建立唯一索引。
  4)普通索引是一个最简单的索引,允许关键字值的重复出现,适合用来进行表中记录的排序和查询,也适合于一对多永久关联中的一边(子表)的索引。数据库表和自由表都可以建立普通索引。
  普通索引和唯一索引可以存储在.CDX独立复合索引文件和.IDX单索引文件中。
(2)索引文件的建立
  1)命令方式
  【格式】INDEX ON<索引关键字表达式>TO<单索引文件>|TAG<标识名>[OF<独立复合索引文件名>]
  [FOR<逻辑表达式>][COMPACT]
  [ASCENDING|DESCENDING][UNIQUE][ADDITIVE]
  【功能】对当前表文件按指定的关键字建立索引文件。
  【说明】<索引关键字表达式>:指定建立索引文件的关键字表达式,可以是单一字段名,也可以是多个字段组成的字符型表达式,表达式中各字段的类型只能是数值型、字符型和日期型和逻辑型。
  当表达式是单个字段名时,字段类型不用转换;应转换成同一类型的表达式。
  TAG<标识名>:此选项只对建立复合索引文件时有效,指定建立或追加索引标识的标识名。
  OF<独立复合索引文件>:指定独立复合索引文件名。若有此选项,表示在指定的独立复合索引文件中追加一个索引标识,若指定的独立复合索引文件不存在,系统将自动建立指定的文件。若没有此选项,表示在结构复合文件中追加一个索引标识,若结构复合索引文件不存在,系统将自动建立结构复合索引文件。
  FOR<逻辑表达式>:表示只对满足条件的记录建立索引。
  COMPACT:此选项只对单索引文件有效,表示建立压缩索引文件。
  ASCENDING|DESCENDINGASCENDING表示按升序建立索引,DESCENDING表示按
降序建立索引。缺省时,按按升序建立索引。单索引文件不能选用DESCENDING选项。UNIQUE:表示建立的是唯一索引。
  ADDITIVE:表示保留以前打开的索引文件。否则,除结构复合索引文件外,以前打开的其他索引文件都将被关闭。
  新建的索引文件自动打开,并开始起作用。
  【例1】对STUD.DBF表文件建立出生日期单索引文件STUD.IDX
  USE STUD
  INDEX ON 出生日期 TO STUD
  【例2】对表文件STUD.DBF,建立一个基于出生日期字段的结构复合索引文件。
  USE STUD
  INDEX ON 出生日期 TAG 出生日期 DESCENDING
  【例3】在表文件STUD.DBF的结构复合索引文件中,按学号追加一个标识。
  USE STUD
  INDEX ON 学号 TAG 学号
  【例4】在表文件STUD.DBF的结构复合索引文件中,先按性别再按学号追加一个标识XBX
H
  USE STUD
  INDEX ON 性别+学号 TAG XBXH
  【例5】在表文件STUD.DBF中,先按性别再按是否团员建立一个独立复合索引文件SXBTY.CDX
  USE STUD
  INDEX ON 性别+IIF(是否团员,’团员’,’非团员’) TAG 性别团员 OF SXBTY
 2)菜单方式
  打开表文件。
  选择【显示】|【表设计器】命令,打开表设计器对话框,选择索引标签。
  在索引名中输入索引标识名,在类型的下拉列表框中确定一种索引类型,在表达式中输入索引关键字表达式,在筛选中输入确定参加索引的记录条件,在排序序列下默认的是升序按钮,单击可改变为降序按钮。
  确定好各项后,选择确定,关闭表设计器,同时索引建立完成。
  同样的方法也可以将以前建立的索引调出,利用表设计器上的插入删除按钮进行插
入或删除。
  注意:用表设计器建立的索引都是结构复合索引文件。
  (3)索引文件的打开【格式1USE<文件名>[INDEX<索引文件名表|>][ORDER<数值表达式2>|<单索引文件>|[TAG]<标识名>[OF<复合索引文件名>][ASCENDING|DESCENDING]]
  【功能】打开指定的表文件及相关的索引文件
  【说明】:
  INDEX<索引文件名表>|?:表示打开的索引文件;如果选择“?”,则系统将出现打开对话框,供用户选择索引文件名;如果<索引文件名表>
  中的第一个索引文件是单索引文件,则它是主索引文件,若第一个索引文件是复合索引文件,则表文件的记录将以物理顺序被访问。
  <索引文件名表>:指定要打开的索引文件,索引文件中的文件扩展名可以省略,但如果存在同名的单索引文件和复合索引文件,必须带扩展名。
  <索引文件名表>中的单索引文件和复合索引文件的标识有一个唯一的编号,编号最小值为1,编号规则为:先将单索引文件按它们在<索引文件名表>中的顺序编号,再将结构复合索引文件按标识产生的顺序连续编号,最后将独立复合索引文件中的标识先按它在<索引文件
名表>中的顺序,再按标识产生的顺序连续编号。
  [ORDER]子句:指定主索引。选择此选项时,主索引文件将不是<索引文件名表>中的第一个单索引文件,而是此选项指定的单索引文件或标识。[ORDER]子句中各选项的含义如下:
  <数值表达式2>指定主索引的编号,若<数值表达式2>的值为0,表示不设主索引。
  <单索引文件>指定的单索引文件设置为主索引。
  [TAG]<标识名>[OF<复合索引文件名>]:表示将<复合索引文件名>中的指定标识作为主索引。字符串常量使用( )作为定界符[OF<复合索引文件名>]缺省表示为结构复合索引文件。
  ASCENDING|DESCENDING:表示主索引被强制以升序或降序索引;缺省此选项,主索引按原有顺序打开。
  【格式2SET INDEX TO[<索引文件名表>][ORDER<数值表达式>|<单索引文件名>|[TAG]<标识名>[OF<复合索引文件名>][ASCENDING|DESCENDING]][ADDITIVE]
  【功能】在已打开表文件的前提下,打开相关索引文件。
  【说明】ADDITIVE:表示保留以前打开的索引文件。否则,除结构复合索引文件外,以前打开的其他索引文件都将被关闭。
(4)索引文件的关闭
  【格式1USE
  【功能】关闭当前工作区中打开的表文件及所有索引文件。
  【格式2SET INDEX TO
  【功能】关闭当前工作区中打开的所有单索引文件和独立复合索引文件。
  【格式3CLOSE INDEXS
  【功能】关闭当前工作区中打开的所有单索引文件和独立复合索引文件。
  注意:结构复合索引文件不能用以上命令关闭,它随表文件的打开而打开,随表文件的关闭而关闭。
  (5)索引的删除
  1)标识的删除
  【格式】DELETE TAG<标识名1>[OF<复合索引文件名1>][,<标识名2>[OF<复合索引文件名2>]]...
  或:DELETE TAG ALL[OF<复合索引文件名>]
  【功能】从指定的复合文件中删除标识
  【说明】OF<复合索引文件名>:指定复合索引文件名,若缺省,则为结构复合索引文件。
  2)单索引文件的删除
  【格式】DELETE FILE<单索引文件名>
  【功能】删除指定的单索引文件
  【说明】关闭的索引文件才能被删除,文件名必须带扩展名。
  【例】删除表文件STUD.DBF的单索引文件STUD.IDX及结构复合索引文件中的所有标识。
  DELETE FILE STUD.IDX
  USE STUD
  DELETE TAG ALL
(6)索引查询(FINDSEEK
  1)菜单方式
  首先打开表文件。
  选择【显示】|【浏览】命令。
  选择【表】|【转到记录】|【定位】命令,打开定位记录对话框。
  作用范围下拉列表框中选择查询范围,在FORWHILE框中输入查询条件,选择定位按钮。系统将指针定位于符合条件的第一条记录上。
  2)索引查询(FINDSEEK
  LOCATE命令用于按条件进行顺序定位,无论索引文件是否打开都可使用。在打开索引文件后,还可以用FINDSEEK命令进行快速检索。
  aFIND命令【格式】FIND<字符串>/<数值常量>
  【功能】在表文件的主控索引中查关键字值与<字符串><数值常量>相匹配的第一个记录。
  【说明】必须打开相应的库文件、主索引文件。
  查询字符串,字符串可以不用定界符括起来,但前后有空格的,则必须要括进来。
  查询常数,必须使用索引关键字的完整值。
  允许查询字符型内存变量,但必须使用宏替换函数。
  由于索引文件中关键字表达式值相同的记录总是排在一起的,可用SKIPDISP命令来逐个查询。
  查询完满足条件的记录后,不能自然给出提示,常借助于EOF()函数来判断查询是否完成。
  多关键字查询,建立索引时STR函数若没有指定小数位,则应补齐不足10位的空格。
  如果用SET EXACT ON命令,则匹配必须是精确的。即FIND命令中的查询内容必须与记录的关键字段值完全相等。如果用SETEXACT OFF命令,则匹配可以是不精确的,即只要FIND命令中的查询内容与记录的关键字段值的左侧相等即可。
  【例】打开表文件STUD.DBF,查姓的记录。
  USE STUD
  SET ORDER TO 姓名 FIND
  bSEEK命令
  【格式】SEEK<表达式>
  【功能】在表文件的主索引中查关键字值与<表达式>值相匹配的第一个记录。
  【说明】SEEK命令可以查字符型、数值型、日期型、逻辑型表达式的值。
  SEEK命令中的表达式的类型必须与索引表达式的类型相同。
  可以查字符、数值、日期和逻辑型字段的值。
  内存变量可以直接进行查询,不用进行宏替换。
  表达式为字符串时,必须用定界符括起来。日期常量也必须用大括号括起来。
  表达式可以为一复杂的表达式,计算机先计算表达式的值,然后用其值进行查询。
  由于索引文件中关键字表达式值相同的记录总是排在一起的,可用SKIPDISP命令来逐个查询。
  如果用SET EXACT ON命令,则匹配必须是精确的。
【例】用SEEK命令在STUD.DBF中查记录。
  USE STUD
  INDEX ON 是否团员 TAG 是否团员
  SET ORDER TO 姓名 SEEK""
  例题
  (1visual FoxPro中的索引有____
  A.主索引、候选索引、普通索引、视图索引
  B.主索引、次索引、惟一索引、普通索引
  C.主索引、次索引、候选索引、普通索引
  D.主索引、候选索引、惟一索引、普通索引
  【解析】本题考查的知识点是visual FoxPro中的索引。
  Visual FoxPro中包括4种索引,分别为主索引、候选索引、惟一索引、普通索引。选项A
的视图索引错误;选项BC中的次索引错误。
  【答案】D
  (2)在Visual FoxPro中,一个表可以创建____个主索引。
  A1      B2      C3      D.若干
  【解析】本题考查知识点是Visual FoxPro中的主索引。在Visual FoxPro中,建立主索引的字段可以看作是主关键字,一个表只能有一个主关键字,所以一个表可以创建一个主索引。因此正确答案为A
  【答案】A
  (3)主索引可确保字段中输入值的_____性。
  A.惟一    B.重复    C.多样    D.兼容
  【解析】本题考查的知识点是主索引的特性。主索引在指定字段或表达式中不允许出现重复值的索引,这种索引可以起到主关键字的作用,所谓不允许出现重复值是指建立索引的字段值不允许重复,即惟一的特性。
  【答案】A
  (4)惟一索引中的惟一性是指____的惟一。
  A.字段值  B.字符值  C.索引项  D.视图项
  【解析】本题考查的知识点是惟一索引的特性。在Visual FoxPro中,惟一索引是为了保持同早期版本的兼容性,它的惟一性是指索引项的惟一,而不是字段值的惟一。选项A中字段值惟一是指主索引中字段值惟一。选项BD说法错误。
  【答案】C
  (5)在Visual FoxPro中的4个索引中,一个表可以建立多个_____
  A.主索引、候选索引、惟一索引、普通索引
  B.候选索引、惟一索引、普通索引
  C.主索引、候选索引、惟一索引
  D.主索引、惟一索引、普通索引
  【解析】本题考查的知识点是visual FoxPro中的索引。在Visual FoxPro中,由于主索引中不允许出现重复值,一个表只能有一个主关键字,因此一个表只可以建立一个主索引。建立候选索引的字段可以看作是候选关键字,所以一个表可以建立多个候选索引。惟一索引中的惟一是指索引项的惟一,不是指字段值的惟一,因此一个表中可以建立多个索引。普通索引可以决定记录的处理顺序,它不仅允许字段中出现重复值,并且索引项也允许出现重复值,
因此一个表中可以建立多个普通索引。本题选项A中的主索引错误;选项C中多了主索引,缺少普通索引;选项D中多了主索引,缺少候选索引。
  【答案】B

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。