关于Db.Search效率方面的几点心得

今天做一个需要显示出今天、明天、后天的车辆申请情况的应用时,总结了一些使用db.search做查询时效率方面的一些情况。
最开始我是想做一个View包含今天、明天、后天的车辆申请单,视图选择公式为:SELECT form = "XXX" & (@Year(@TextToTime(Applydate)) =@Year(@Today) & @Month(@TextToTime(Applydate)=@Month(@Today) & (@Day(@TextToTime(Applydate))=@Day(@Today) | @Day(@TextToTime(Applydate))=@Day(@Tomorrow) | @Day(@TextToTime(Applydate))=@Day(@Adjust(@Tomorrow; 0; 0; 1; 0; 0; 0)))))
这个公式写的实在是巨复杂,导致在很少文档量的情况下刷新这个视图都要30秒以上,用LS去getview时也是非常的慢。

于是我改写了这个视图选择公式为:SELECT form = "XXX" & (@TextToTime(Applydate)=@Today | @TextToTime(Applydate)=@Tomorrow | @TextToTime(Applydate)=@Adjust(@Tomorrow; 0; 0; 1; 0; 0; 0)),改写后的视图刷新稍微快了些,但是web端展现页面时还是会有明显停顿的感觉。

接着我换用db.search直接从数据库中查询,查询公式为: search$ = {Form="XXX" & (@TextToTime(Applydate)=@Today | @TextToTime(Applydate)=@Tomorrow | @TextToTime(Applydate)=@Adjust(@Tomorrow; 0; 0; 1; 0; 0; 0))}这样得到的数据其实跟视图展示的方法速度上是差不多的,还是会有明显的停顿。
 
最后把今天、明天、后天的值算出来转换成String,然后再用db.search来查询,这个时候页面显示速度就很快了,基本上一刷而过。
具体代码是:
Dim date1 As New NotesDateTime(Today())
today1$ = Format$(date1.DateOnly, "YYYY-MM-DD")
Call date1.AdjustDay(1)
tomorrow1$ = Format$(date1.DateOnly, "YYYY-MM-DD")
Call date1.AdjustDay(1)
thirdday$ = Format$(date1.DateOnly, "YYYY-MM-DD")
search$ = {Form="XXX" & (Applydate="}+today1$+{" | Applydate="}+tomorrow1$+{" | Applydate="}+thirdday$+{")}
 
由此总结出以下几点:
1. 在视图选择公式中尽可能选择简单的逻辑来组成条件选择公式。
2. 在视图选择公式中尽可能避免使用@Today,@Tomorrow这样的函数,这样的视图每次刷新时都会重建索引(这类视图好像有个名称的,不过忘了),很影响系统性能的。
3. 在针对要获取明天、后天这样的动态日期的数据时,用LS的Db.search比用视图效率要高,因为LS中可以把明天、后天这样的值先算出来再带入searchformula$中成为一个常量,而视图选择公式就没法这样来做了。 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值