大批量参数输入查询处理

07-06-15 JurnZhou
我是电信的,原来公司有一套PB开发的系统,现转成Web模式。使用的部门很不讲理,很多时候要以原PB系统的运行速度和Web模式的作比较。所以只有优化,别无选择。

现有一令小弟头疼的问题望能解决:

有一张全市的话费表约1400万条数据。里面有200万个号码。

有两个字段:

号码 话费帐目项

110 本地话费

110 长途话费

112 本地话费

现在要对表进行报表统计。

要一次过输入6000至8000个号码,在这张表找出对应的号码。

要知道 oracle in的最大数为1000个,所以当初我用or in(“前1000个号码”)+or in(1000至1999的号码)的方法拼成sql语句执行。

当输入的电话数为4000左右的话,输出的结果是4000*该批号码对应帐目项可能就是40000条记录,我用了分页的方式运行4000条号码的查询,只要5秒内就能出结果。

当中包含的外表关联就不说了,总之1000至2000的批量输入是很快的基本和PB的速度一样,而且经过压力测试可以多并发。

但使用的部门叼,一次输入个6、7000个。搞到oracle出现个share_pool错误。估计是sql拼起来过长所致,叫他们分开录入,他们就以PB那套系统,6000、70000三秒就搞定了。而且是全部结果都显示出来了。然后说:“我要的就是这样的速度”,我都欲哭无泪。但领导也要求这样。

所以只能考虑用中间表了,但多用户操作报表查询的话,要怎样解决呢??

    

banq
2007-06-19 15:45
这是比较难了,主要看你业务对性能要求严格性。

批量输入可采取JMS等异步操作,查询还是可以试试缓存,对缓存粒度的更新尽量小一些,这需要根据业务特点。

JurnZhou
2007-06-22 17:57
问题已经解决,我用中间表,开十个线程跑插入输入2万条记录,插表只要半秒。之后查询中间表。完成。

dongliheng
2007-06-24 18:48
学习学习

猜你喜欢