Chinaunix首页 | 论坛 | 博客
  • 博客访问: 51039
  • 博文数量: 18
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 220
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-11 17:12
文章分类
文章存档

2010年(7)

2009年(1)

2008年(10)

我的朋友
最近访客

分类: 数据库开发技术

2010-03-28 13:51:04

虽说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倍。
阅读(856) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~