索引序列的应用

在数据库中,对某些表正确地建立索引,可以使得相关的查询效率大大提高。同样,在esProc中,也可以为排列或者序表建立索引序列,以提高反复查询数据时的效率。

我们经常需要在人员表中进行查询,如下例中的Employee表。

 ABC
1=connect("esProc")  
2=A1.query("select Eid,Name,FirstName,State from employee") 5000
3>A2.dsc(Name+" "+FirstName:FullName) 100
4=C3.(A2(int(rand()*C2)+1).FullName)  

A3格中表达式在A2排列中添加伪字段FullName,A2中结果如下(共5000条记录):

第四行中,随机获取100个FullName作为查询条件进行查询(这里允许重复),存储在A4中,A4中数据如下:

下面,为了考察索引序列的作用,将分别在有无索引的情况下,根据A4中的100个姓名,在A2的数据中查找员工资料,在测试中,只返回第一个找到的记录。

首先来看不使用索引的情况,由于Employee中是用员工编号Eid排序的,因此在检索姓名时,无法使用二分法。 

6=now()=C3.((a=#,A2.select@1(FullName==A4(a))))
7=interval@ms(A6,now()) 

A6和A7中的表达式,通过now()函数来获取当前时间,来大致估算查询用时(毫秒数),查询结果记录在B6中,查询结果如下:

用时估算如下:

再来看使用索引的情况:

9=now()=A2.psort(FullName)
10 =C3.((a=#,A2(B9.select@1b(A2(~).FullName:A4(a)))))
11=interval@ms(A9,now()) 

首先在B9中建立对FullName的索引序列,这样在查询时就可以利用索引使用二分法进行查询。为了比较是否使用索引序列情况下的效率,建立索引所耗费的时间也被记录在用时中。B9中的索引序列记录了A2按FullName进行排序的记录编号,如下所示:

B10中的查询结果与B6是相同的:

A11中的用时估算如下:

可见,在使用了索引序列的情况下,利用二分法进行查询,可以有效地提高查询速度。但是需要注意的是,建立索引序列本身也是需要进行计算的,利用索引序列进行的查询次数越多,查询效率的提高越明显。当需要进行查询的次数比较少时,建立索引序列可能就不必要了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值