本章介绍index()函数的多种用法。
描述:
为序表的键建立索引表
语法:
T.index(n)
备注:
为序表T的键建立长为n的索引表,n为0或序表重置键时将清除索引表;n省略则自动选长度。如果需要多次根据键来查找数据,在建立了索引表之后可以提高效率。建立索引时假定记录的主键唯一,否则出错。仅按基本键做索引表,不同时间键的记录排进同一索引位置。
参数:
T |
有键的序表 |
n |
索引长度 |
选项:
@s |
T的基本键是排号时则建立成多层树状索引,忽略n |
|
@m |
并行建立 |
|
@n |
为序表建立序号索引;序号索引用于外键序号化,要求事实表的外键值对应维表记录的序号,使用时序号键可省略;使用该选项时将忽略参数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的索引表 |
4 |
=A1.index@m(100) |
并行建立索引表 |
建立序号索引
|
A |
|
1 |
=connect("demo").query("SELECT * FROM CITIES") |
返回序表 |
2 |
=connect("demo").query("SELECT * FROM STATECAPITAL").keys(STATEID) |
返回序表,并设置序表的键为EID |
3 |
=A2.index@n() |
为A2表建立序号索引 |
4 |
=A1.switch(STATEID,A3) |
CITIES表作为事实表,STATECAPITAL作为维表,将CITIES表中的STATEID键值切换为STATECAPITAL的指引记录,计算过程中会使用外键STATEID的索引表,此时表达式中可以省略序号键STATEID,等同于A1.switch(STATEID,A3:#) |
相关概念:
描述:
为内表的键建立索引表
语法:
T.index(n)
备注:
为内表T的键创建索引长度为n的索引表,排号键时省略n,如果需要多次根据键来查找数据,在建立了索引表之后可以提高效率。建立索引时假定记录的主键唯一。
参数:
T |
主键唯一的内表 |
n |
索引长度。 |
选项:
@m |
并行建立 |
@n |
可用序号键建立索引,序号键可省略,但有时间键时不能省略 |
@s |
可用排号键建立索引 |
返回值:
内表
示例:
|
A |
|
1 |
=file("D:\\emp3.ctx") |
|
2 |
创建组表基表 |
|
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的索引表 |
12 |
=demo.cursor("select * from employee").memory() |
返回内表 |
13 |
=A12.keys@t(EID,HIREDATE) |
设置内表的基本键为EID,时间键为HIREDATE |
14 |
=A12.index@n() |
为内表建立索引 |
描述:
语法:
T.index(I:h,w;C,…;F,…)
备注:
将实表/复组表T中满足条件w的记录按列 C,…作为键创建索引I,其中w可以省略;T是复组表时,每个分表分别建立索引。
有h时创建平均长度为h的hash索引;创建索引时必须存在列C和索引名称I,索引名称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*”)式检索 |
返回值:
实表/复组表
示例:
|
A |
|
1 |
=file("emp1.ctx") |
|
2 |
=A1.create(#EID,NAME) |
创建组表基表 |
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索引,索引文件名称为:emp1.ctx_table1_test_index1 |
9 |
=A5.index(test_index3,["F"].contain(GENDER);DEPT;) |
使用contain语法,用DEPT字段建test_index3索引,索引文件名称为:emp1.ctx_table1_test_index3 |
10 |
=A5.index(idx1:10;DEPT;) |
用DEPT字段创建长度为10的索引idx1 ,索引文件名称为:emp1.ctx_table1_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_index4,GENDER=="F";DEPT;) |
按列DEPT建立全文索引 |
15 |
=A14.icursor (;like(DEPT,"*ale*"),test_index).fetch() |
使用like(“*X*”)式查询 |
16 |
=A5.index@2(test_index3) |
主动加载索引的第二层并保持 |
17 |
=A5.index@3(test_index3) |
主动加载索引的第三层并保持 |
18 |
=A5.index@0(test_index3) |
释放索引 |
Ø T为复组表:
|
A |
|
1 |
=file("test.ctx":[1,2,3]) |
|
2 |
=A1.create@y(#EID,NAME,GENDER,DEPT;EID%3+1) |
生成复组表 |
3 |
=connect("demo").cursor("select EID,NAME,GENDER,DEPT,GENDER from employee") |
返回游标 |
4 |
=A2.append@x(A3) |
在复组表中追加游标中的数据 |
5 |
=A4.index(test_index4,GENDER=="F";DEPT;) |
每个分表创建一个索引 |
描述:
为内表建立非主键索引
语法:
T.index(I:h,w;C,…)
备注:
将内表T中满足条件w的记录按列 C,…作为键创建索引I,其中w可以省略,有h时创建平均长度为h的hash索引,h为0时用缺省自动计算出HASH表长度。
为内表T建立的非主键索引,在生成游标时可用,可以建立多个。
参数:
T |
内表 |
I |
索引名称 |
w |
筛选条件,缺省读取全集 |
C |
建立索引的字段 |
h |
索引长度 |
返回值:
内表
示例:
|
A |
|
1 |
=demo.cursor("select * from SCORES ") |
|
2 |
=file("SCORES_ClassTwo.ctx") |
创建组表文件 |
3 |
=A2.create@y(#CLASS,#STUDENTID,SUBJECT,SCORE) |
创建组表的基表,其中CLASS,#STUDENTID为组表的键 |
4 |
=A3.append@i(A1) |
将A1游标中的数据追加到基表中 |
5 |
=A4.memory() |
生成内表 |
6 |
=A5.index(index1:10,CLASS =="Class one";SCORE) |
对内表建立非主键索引 |