index()

阅读(1164) 标签: index,

本章介绍index()函数的多种用法。

T.index()

描述:

为序表的键建立索引表

语法:

T.index(n)

备注:

为序表T的键建立长为n的索引表,n0或序表重置键时将清除索引表;n省略则自动选长度。如果需要多次根据键来查找数据,在建立了索引表之后可以提高效率。建立索引时假定记录的主键唯一,否则出错。

参数:

T

有键的序表

n

索引长度

选项:

@s

T的键是排号时则建立成多层树状索引,忽略n

返回值:

序表

示例:

 

A

 

1

=demo.query("select EID,NAME,SALARY from EMPLOYEE where EID<4")

 

2

=A1.keys(EID)

设置A1的键为EID

3

=A1.index(10)

为序表键建立长度为10的索引表

相关概念:

r.key()

T.index(n)

描述:

为内表的键建立索引表

语法:

T.index(n)

备注:

为内表T的键创建索引长度为n的索引表,排号键时省略n,如果需要多次根据键来查找数据,在建立了索引表之后可以提高效率。建立索引时假定记录的主键唯一。

参数:

T

主键唯一的内表

n

索引长度。

返回值:

内表

示例:

 

A

 

1

=file("D:\\emp3.ctx")

 

2

=A1.create(#EID,NAME;EID)

创建组表基表

3

=demo.cursor("select EID,NAME from employee where EID< 10")

 

4

=A2.append(A3)

 

5

=A2.attach(table3,#GENDER)

在基表上添加附表

6

=demo.cursor("select EID,GENDER from employee where EID< 10")

返回游标

7

=A5.append(A6)

在附表中追加游标记录

8

=A5.memory()

用附表生成内表

9

=A8.keys(EID)

设置内表的键为EID

10

=A8.index(10)

建立长度为10的索引表

T.index(I:h,w;C,…;F,…)

描述:

为实表创建检索文件

语法:

T.index(I:h,w;C,…;F,…)

备注:

将实表T中满足条件w的记录按列 C,…作为键创建索引I,其中w可以省略;有h时创建平均长度为hhash索引;创建索引时必须存在列C和索引名称I,索引名称I不可重复,索引创建成功后自动生成名称唯一的索引文件。T是组文件时,I将做成每分区一个索引。只有I参数时删除索引I,参数全部为空时删除所有索引;当是hash索引时,只能等值查询,也可以使用contain语法。参数C不允许是从主表继承的字段。

F为附表的字段名,有参数F时,将F字段记入索引文件,当使用该索引取出记录的时候,只能取出索引字段C和字段F,该类索引的优势在于可以通过C的值快速查询出来F的值。F省略时索引中记录所有实表字段的位置信息。

参数:

T

实表

I

索引名称

w

筛选条件,可省略,缺省读取全集

C

建立索引的字段

h

索引长度

F

实表的字段名,可省略

选项:

@2

只有参数I时,主动加载索引的第二层并保持

@3

只有参数I时,主动加载索引的第三层并保持

@0

只有参数I时,释放

@w

按列C建立全文检索,可支持like(“*X*”)式检索

返回值:

Boolean

示例:

 

A

 

1

=file("D:\\emp1.ctx")

 

2

=A1.create(#EID,NAME;EID)

创建以EID为排号键、分段键的组表基表

3

=demo.cursor("select EID,NAME from employee where EID< 10")

 

4

=A2.append(A3)

在基表中追加游标记录

5

=A2.attach(table1,DEPT,GENDER)

在基表上增加附表table1

6

=demo.cursor("select EID,DEPT,GENDER from employee where EID< 10")

 

7

=A5.append(A6)

在实表table1中追加游标记录

8

=A7.index(test_index1,GENDER=="F";DEPT;)

DEPT字段建test_index1索引

9

=A5.index(test_index3,["F"].contain(GENDER);DEPT;)

使用contain语法,用DEPT字段建test_index3索引

10

=A5.index(idx1:10;DEPT;)

DEPT字段创建长度为10的索引idx1

11

=A5.index(test_index3)

删除索引test_index3

12

=A5.index()

删除所有索引

13

=A5.index(test_index,GENDER=="F";DEPT;GENDER)

建立的索引,在通过该索引取数时,只能取出索引字段DEPT和字段GENDER

14

=A7.index@w(test_index,GENDER=="F";DEPT;)

按列DEPT建立全文索引

15

=A14.icursor (;like(DEPT,"*ale*"),test_index).fetch()

使用like(“*X*”)式查询

16

=file("test.ctx":[1,2,3])

返回组文件

17

=A16.create(#EID,NAME,GENDER,DEPT;;EID%3+1)

生成复组表

18

=demo.cursor("select EID,NAME,GENDER,DEPT,GENDER from employee")

 

19

=A17.append@x(A18)

A18对应A17的多个分区,需要每次计算分区表达式EID%3+1

20

=A19.index(test_index4,GENDER=="F";DEPT;)

在分区1/2/3下,每个分区创建一个索引test_index4

21

=A5.index@2(test_index3)

主动加载索引的第二层并保持

23

=A5.index@3(test_index3)

主动加载索引的第三层并保持

24

=A5.index@0(test_index3)

释放索引