一个管理程序的这样一个需求,有一个客户库(kh)和一个客户电话库(khtel),要想查询一个电话号码中包含指定电话数字的客户列表,起先我用了一个查询:
expression对象为ehkh,它的expression表达为:
ehkh.Expression := 'kh.allinstances->select(khtels->exists(telnum.sqllike(''%' + textbox1.Text + '%'')))'
在第一次执行查询时,相当费时,5000记录在我的pIIII机器上用了近半分钟.经过反复思考,改用 ehkh.Expression:='khtel.allinstances->select(telnum.sqllike(''%' + textbox1.Text + '%'')).kh'
得到同样的结果,但费时不到1秒.
最后想来,下面的一个查询为单表查询,得到少量tel对象,再找其对应的kh,上面一个表达式为多表复合查询,计算量几何倍级.故相当慢,改造成功后,大大提高了效率.故eco对象始终要与原来传统编程中sql语句的原理结合起来理解才能深入. |