虽说FOXPRO已经是古董级的桌面数据库,现在用得越来越少了,但毕竟有些场合用起来方便,不时也会翻出来用一下。按说这么多年了,应该不会遇到不明白的性能问题了吧,但还真不能自大,这不就遇上一回。
有两个医保卡数据表需要比对,一个表是全部的消费明细,一个表是全部的圈存明细。两个表都有18位的字符型卡号字段,还各有一个数字型流水号字段。现在需要把圈存金额合并到消费明细中,规则是卡号和流水号一致时,消费表中的一个字段填充为相应的圈存金额。匹配时用下面的语句:
locat for a.cardid==b.cardid and a.sn=b.sn
如果表不加索引,在消费明细60万条记录,圈存明细6万条记录的情况下,一台赛扬2.4G、1G内存的机器上,一分钟也就能更新280个记录。消费明细做主表,对卡号字段加索引,速度基本不变,但如果对流水号字段加索引,则处理速度会大幅度提高至每分钟1000条记录。如果两个字段都加索引,速度也基本不会再提高。这时使用的FOXPRO版本是5.0和9.0,版本的提升对速度的改善没有任何影响。同样的程序放在P4/2.4G/1G的机器上,记录处理速度达到了每分钟5000条。真没想到同主频的赛扬和奔4有这么大的整数运算差别!
事情还没结束。当将a.cardid==b.cardid改为a.cardid=b.cardid时,FOXPRO5.0和9.0运算速度都大幅下降至没加索引时的程度,很明显是查询优化失灵。搞了这么多年,真没想到一个字符串比较的==和=有这么大的差异!然而当这个程序在FOXPRO6.0环境下运行时,==和=就没有任何差别了。在一台2G主频的酷睿双核笔记本上,使用FOXPRO6.0环境,同样的程序一分钟处理了30000条记录。至此,处理速度提高了100倍。
阅读(862) | 评论(0) | 转发(0) |